我的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
答案 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)