获取分组的最新记录

时间:2014-11-12 19:31:09

标签: mysql mysqli

我有一个像这样的表结构:

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,但这似乎没有完成任务

2 个答案:

答案 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