SQL 按日期排序并按用户获取结果

Posted

技术标签:

【中文标题】SQL 按日期排序并按用户获取结果【英文标题】:SQL Orderby date and get results per user 【发布时间】:2016-08-17 08:34:39 【问题描述】:

我有一个包含以下字段的数据库表

ID    User ID    Comment   Date
1     1          Test      2016-08-07
2     2          Test2     2016-08-17
3     1          Test3     2016-08-16
4     2          Test4     2016-08-15

首先我们获取最新日期,然后获取该日期用户的所有记录。然后是下一个最新日期和该日期用户的所有记录。所以输出是

2     2          Test2     2016-08-17
4     2          Test4     2016-08-15
3     1          Test3     2016-08-16
1     1          Test      2016-08-07

如果有人可以提供sql查询,请告诉我

谢谢

【问题讨论】:

如果用户 1 的日期比用户 2 新,那么仅 ORDER BY 将不起作用 【参考方案1】:

试试这个

select user.*
from user
join(
  select UserID, Max(Date)  md
  from user 
  group by UserId
  ) dts on dts.UserID = user.UserID
order by dts.md desc, user.UserId, user.Date desc

【讨论】:

请为您的回答提供解释。不要只放你的代码而不做任何解释。 @john,我希望这正是 OP 所描述的。我不反对解释,但查询的哪一部分需要解释? 您应该讨论问题是什么并说明您是如何解决问题的。我的意思是不要只说“试试这个:”,你会给出一个难以阅读的代码。 @Serg 您的回答似乎是正确的。感谢您的帮助 @john,请问这段代码的哪一部分难以阅读?您的意思是“为每个用户标识选择最大日期”真的比select UserID, Max(Date) md 更清楚吗?我认为代码非常自我解释,没有技巧,没有黑客。【参考方案2】:

请在mysql中使用ORDER BY

例子:

SELECT * FROM user ORDER BY userId, date desc

【讨论】:

如果用户 1 的日期比用户 2 新,那么仅 ORDER BY 将不起作用 谢谢。但如果用户 2 的日期比用户 1 更新,它就不起作用 为什么只有日期顺序不起作用?在这种情况下,我可以提供更多帮助 我想我找到了答案。 Serg 的反应似乎是正确的。请尝试使用 db 表。如果用户 2 的日期比用户 1 更新,您将不会得到结果。谢谢【参考方案3】:

我认为您需要使用的 SQL 查询是:

select * 
from user
order by date desc, user_id

【讨论】:

它不起作用并给出正确的顺序。它只会按日期排序 它应该首先按日期排序,每个日期按用户ID排序。

以上是关于SQL 按日期排序并按用户获取结果的主要内容,如果未能解决你的问题,请参考以下文章

核心数据按年份分组并按日期排序

如何在 SQL 中按多列分组并按日期排序?

sql 按计数获取日期的博客存档格式,并按月/年分组

从照片库加载图像并按日期排序的内存问题

C# 需要将 sql 中的数据放入 DataGridView 并在行中按日期排序

PHCollection:获取所有专辑,按最近编辑的排序