【问题标题】:MYSQL - get the most recent result when using GROUP BY [duplicate]MYSQL - 使用 GROUP BY [重复] 时获取最新结果
【发布时间】:2018-06-14 20:47:08
【问题描述】:

我的 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

【问题讨论】:

  • @Shadow,我的问题和你建议的完全不一样

标签: mysql group-by distinct


【解决方案1】:

您可以随意管理INTEVRAL n DAY,了解您想查看多少天。

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

【讨论】:

  • 感谢您的回答,但这根本不是我想要的
【解决方案2】:

您可以尝试以下方法:

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';

在上面,我创建了一个表,其中包含每个 UserIDmax(date)。我们可以将此表连接回原始表,使用inner join 我们确保结果只是最新的日期行。我们使用where 子句过滤输出,只针对那些带有Status = 'a' 的行

您可以在 SQL Fiddle here 中使用查询

【讨论】:

  • 感谢您的回答。您建议的这个查询也会导致用户 ID 等于 1 的行,我不希望这样,因为我已将其状态更改为 d。
  • @BrunoCosta 感谢您的澄清。请查看更新后的答案
猜你喜欢
  • 1970-01-01
  • 2013-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-07
  • 2014-04-28
  • 2014-04-22
  • 1970-01-01
相关资源
最近更新 更多