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 按日期排序并按用户获取结果的主要内容,如果未能解决你的问题,请参考以下文章