我有以下表持有虛擬貨幣用於每週的比賽:PostgreSQL的:如何找到的,最大貨幣ID在每週表
# select * from pref_money limit 5;
id | money | yw
----------------+-------+---------
OK32378280203 | -27 | 2010-44
OK274037315447 | -56 | 2010-44
OK19644992852 | 8 | 2010-44
OK21807961329 | 114 | 2010-44
FB1845091917 | 774 | 2010-44
(5 rows)
在我的PHP腳本列出用戶,我需要知道誰一直是每週贏家,以便我可以在他們的名字附近展示獎章。所以我想這個SQL語句:
# find the weekly winners
$sth = $db->prepare('select id from pref_money
where money in
(select max(money) from pref_money group by yw)');
$sth->execute();
while ($row = $sth->fetch(PDO::FETCH_ASSOC))
@$medals[$row['id']]++;
這主要工作,但有時我得到誤報,當用戶恰巧有一些一週的錢一樣多(但不是最大那裏)作爲另一週的勝利者。
有誰有一個想法如何更改SQL語句,使被選中真的只有贏家IDS?
當我嘗試以下方法,我得到一個錯誤:
# select id, max(money) from pref_money group by yw;
ERROR: column "pref_money.id" must appear in the
GROUP BY clause or be used in an aggregate function
謝謝! 亞歷
UPDATE:在PostgreSQL 8.4.5/CentOS的並且可以有關係:-)
+1:6秒打我! – 2010-12-12 18:40:11
謝謝,但第二個代碼並沒有真正的工作 - 顯示所有行pref_money表 – 2010-12-12 19:52:47
哎呀......試圖neaten它打破了連接條件。 – araqnid 2010-12-12 20:00:29