У меня есть следующая таблица с виртуальными деньгами для еженедельных турниров:
# 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, чтобы действительно выбирались только идентификаторы победителя?
Когда я пробуюследующее, я получаю сообщение об ошибке:
# 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
Спасибо!Alex
ОБНОВЛЕНИЕ: PostgreSQL 8.4.5 / CentOS и могут быть связи: -)