【发布时间】:2012-08-29 04:16:11
【问题描述】:
给定一个名为 Messages 的数据库表,其中包含以下列:-
MessageID, FromUser, ToUser, Message, DateTime
我想编写一个 SQL 查询,为“FromUser”列选择不同的值,但我也想要按 DateTime 排序的值。
本质上是一个查询,例如:
SELECT * FROM Messages WHERE ToUser='1' ORDER BY DateTime DESC
然后,使用以下内容选择不同的 FromUser:
SELECT DISTINCT FromUser FROM Messages WHERE ToUser='1'
同时,保持上一个查询的顺序。
我曾尝试使用嵌套查询,但遇到了一个问题,因为您无法在内部查询中使用 ORDER BY。
本质上,我希望查询的语法表示(这是无效的,但是...):
SELECT DISTINCT FromUser FROM Messages WHERE ToUser=1 AND FromUser IN
(SELECT * FROM Messages WHERE ToUser=1 ORDER BY DateTime DESC)
【问题讨论】:
-
每个唯一的 FromUser 可以有多个候选日期,因此您需要一些聚合...您想要哪个日期,max()?
-
这里的问题是,如果 FromUser 在
Messages表中以不同的时间出现多次怎么办。它们应该出现在列表的什么位置? -
我正在尝试找出您想要的输出的原因。如果您发布一些虚假数据和预期输出,我很可能会在这里得到快速回复。
-
@rs - 您的查询不起作用(之前尝试过),因为当 DateTime 不在 select 语句中时,它无法按 DateTime 排序。
-
@AlexK。 - 是的,我想选择日期的最大值。
标签: sql sql-server sql-server-2008 tsql