MYSQL - 使用GROUP BY时获取最新结果

时间:2018-06-14 20:47:08

标签: mysql group-by distinct

我的MYSQL数据库中有以下表格:

USERS

ID | login
---------------
1  | user1
2  | user2
3  | user3

STATUS

ID | userID    | date                | status
1  | 1         | 2018-05-10 10:00:00 | a
2  | 2         | 2018-05-15 10:00:00 | a
3  | 3         | 2018-05-20 10:00:00 | a
4  | 3         | 2018-05-20 11:00:00 | d
5  | 1         | 2018-05-15 11:00:00 | d
6  | 3         | 2018-05-25 10:00:00 | a

如何查询STATUS表格,仅获取最新date行,status列等于a但未重复userID的行1}}?

在这种情况下,这些是我希望我的查询返回的行:

userID    | date                | status
2         | 2018-05-15 10:00:00 | a
3         | 2018-05-25 10:00:00 | a

2 个答案:

答案 0 :(得分:0)

你可以尝试以下方法:

select s1.userID, s1.date, s1.status from status s1
inner join (select userID, max(date) date from status group by userID) s2 
  on s2.date = s1.date and s1.userID = s2.userID
where s1.status = 'a';

上面我创建了一个每max(date) UserID的表格。我们可以使用inner join将此表连接回原始表,我们确保结果只是最新的日期行。我们使用where子句来过滤仅Status = 'a'

行的输出

您可以在SQL Fiddle here

中使用查询

答案 1 :(得分:0)

您可以根据需要INTEVRAL n DAY查看您想要检查的天数。

SELECT DISTINCT * FROM STATUS WHERE STATUS.date = DATE_SUB(CURDATE(), INTERVAL 10 DAY)