0

当我 GROUP BY QID 时,如何确保只返回最近的行?

ID, QID, VALUE, TIMESTAMP
45,1,Male,1362044759
58,1,Female,1362045122
59,1,Male,1362045149
60,1,Female,1362045153
82,1,Female,1362045863
83,1,Female,1362045887
92,1,Male,1362046012
101,1,Female, 1362046401

SELECT ID, QID, VALUE, TIMESTAMP FROM table GROUP BY ID

...返回第一行。我不能简单地做一个 LIMIT 1,因为这只是一个例子,表中有很多 QID,它们都是分组的。

谢谢。

4

3 回答 3

1

我在这里假设您想要每个QID. 您通常会使用派生表子查询来获取每个QID的最新TIMESTAMP值,然后加入:

SELECT ...
FROM myTable AS t
INNER JOIN (SELECT QID, MAX(`TIMESTAMP`) AS MaxT FROM myTable GROUP BY QID) l
    ON t.QID = l.QID AND l.maxT = t.`TIMESTAMP`

这也是假设您的TIMESTAMP列随着时间的推移而增加。

于 2013-02-28T10:54:44.297 回答
0

您可以使用“GROUP_CONCAT”来提取分组数据。

SELECT GROUP_CONCAT(ID ORDER BY TIMESTAMP DESC) AS latest_id
于 2013-02-28T10:58:16.233 回答
0

如果要返回最新记录:

SELECT *
FROM TBL
ORDER BY `TIMESTAMP` DESC
LIMIT 1;

否则,如果您想获取每组 QID 的最新记录,请查看此Stack Overflow 帖子,该帖子以最佳解决方案处理您的相同问题。

于 2013-02-28T10:58:33.230 回答