给定一个示例表:
| id | locationID | Date_Time | temp |
|----|------------|---------------------|------|
| 1 | L001 | 2018-09-04 11:25:00 | 52.6 |
| 2 | L002 | 2018-09-04 11:35:00 | 66.1 |
| 3 | L003 | 2018-09-04 03:30:00 | 41.2 |
| 4 | L003 | 2018-09-05 10:22:00 | 71.8 |
| 5 | L003 | 2018-09-06 14:21:00 | 63.4 |
| 6 | L003 | 2018-09-06 18:18:00 | 50.1 |
我想返回每个组的最新 N 条记录,如下所示:
预期输出:
| id | locationID | Date_Time | temp |
|----|------------|---------------------|------|
| 1 | L001 | 2018-09-04 11:25:00 | 52.6 |
| 2 | L002 | 2018-09-04 11:35:00 | 66.1 |
| 4 | L003 | 2018-09-05 10:22:00 | 71.8 |
| 5 | L003 | 2018-09-06 14:21:00 | 63.4 |
| 6 | L003 | 2018-09-06 18:18:00 | 50.1 |
我有这个查询,但它只返回每个组的最新行?我想为每个组返回不止一行(N 行)?
SELECT *
FROM HealthStatus
WHERE Date_Time IN (
SELECT MAX(Date_Time)
FROM HealthStatus
GROUP BY LocationID
)
非常感谢您提供有关如何实现所需输出的帮助。提前致谢。
最佳答案
有什么方法可以获取每个组的最新 N 行?
在 row_number() 可用之前,您可以使用变量来模拟该函数
SELECT
*
FROM (
SELECT
@row_num :=IF(@prev_value=locationID,@row_num+1,1)AS RowNumber
, id , locationID , Date_Time,temp
, @prev_value := locationID
FROM HealthStatus
CROSS JOIN (SELECT @row_num :=1, @prev_value :='') vars
ORDER BY
locationID , Date_Time DESC
) derived
WHERE RowNumber < 4
关于MySQL GROUP BY 每组返回多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52217585/