使用group by时获取最新结果

w41d8nur  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(337)

这个问题在这里已经有答案了

sql仅选择列上具有最大值的行[重复](27个答案)
两年前关门了。
我的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` ?
在这种情况下,我希望查询返回以下行:

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

ct3nt3jp

ct3nt3jp1#

您可以尝试以下方法:

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中的查询

jhdbpxl9

jhdbpxl92#

你可以随心所欲 INTEVRAL n DAY 关于你要查多少天。

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

相关问题