我有一个像这样的表结构:
ID Win Bet UserID Date
1 win 1000 1 2014-11-12 19:15:34
2 win 1000 1 2014-11-12 19:15:49
3 loose 1000 1 2014-11-12 19:21:52
我运行这样的查询:
SELECT
u.Username,
SUM(b.Bet) AS totalWin,
b.date,
b.win
FROM blackjack_history AS b
INNER JOIN users_main AS u ON b.UserID = u.ID
WHERE b.win = 'win' GROUP BY b.UserID ORDER BY totalWin DESC, LIMIT 10
Probem是我运行此查询时,它返回ID为1的行。
我如何返回ID 2的日期?我尝试过使用Order By
,但这似乎没有完成任务
答案 0 :(得分:1)
您不想只是最新的记录。你也在做聚合。所以,只需使用max()
:
SELECT u.Username, SUM(b.Bet) AS totalWin, max(b.date) as date, b.win
FROM blackjack_history b INNER JOIN
users_main u
ON b.UserID = u.ID
WHERE b.win = 'win'
GROUP BY b.UserID
ORDER BY totalWin DESC
LIMIT 10;
答案 1 :(得分:0)
您正在滥用GROUP BY
的有害非标准MySQL扩展。读这个。 http://dev.mysql.com/doc/refman/5.6/en/group-by-handling.html在标准聚合查询(例如其中包含SUM()
的查询)中,您需要提及SELECT
子句中GROUP BY
子句中的每个项目,除非它是一个聚合函数。在非标准MySQL中,当您从GROUP BY
中省略项目时,会得到不可预测的结果。在标准SQL中,您会收到错误消息。
尝试使用以下GROUP BY子句而不是您显示的子句。
GROUP BY u.Username, b.date, b.win