我在表格A 中有数据,如下所示。我想将memberID分组为一组,并对每组中的Date_Time进行排序,如下面的快照
所示Date_Time PersonID Status
4/2/14 10:15 AM ghi Closed
4/1/14 9:15 AM ghi Cancelled
4/1/14 11:00 AM abc Cancelled
4/2/14 8:12 AM def Closed
4/1/14 9:17 AM def Hold
4/3/14 2:17 PM abc Hold
4/2/14 8:30 AM abc Open
4/3/14 8:16 AM jkl Closed
4/1/14 12:10 PM jkl Open
4/1/14 11:30 AM abc Hold
下面附带的最终示例快照将显示 memberID: ghi 第一行日期时间'2014年4月1日9:15: 00 AM' 大于 memberID: def 第1行 date_Time '4/1/2014 9:17: 00 AM' 以黄色突出显示。这就是 memberID ghi 将调整设置为第一组,然后依次为 memberID def 设置的主要原因 meberID abc , jkl ... 等......
有人可以帮我解决如何编写MS-SQL查询以实现最终结果。
非常感谢你的帮助。
答案 0 :(得分:4)
如果我正确理解您的问题,您需要使用join
聚合min
将表格重新发送给自己以建立排序顺序:
select t.*
from yourtable t
join (
select personid,
min(date_time) min_date_time
from yourtable
group by personid
) t2 on t.personid = t2.personid
order by t2.min_date_time, t.date_time
答案 1 :(得分:1)
此处another way:
SELECT
Date_Time,
PersonID,
Status
FROM
dbo.atable
ORDER BY
MIN(Date_Time) OVER (PARTITION BY PersonID),
PersonID,
Date_Time
;
然而,这种方法与sgeddes's answer中的方法相同,它只是具有不同的语法。它使用Date_Time
计算最小MIN(...) OVER (...)
值。这使得对派生表的连接完全没有必要。
另一个小区别是我已将PersonID
添加到ORDER BY子句中,以确保具有相同最小Date_Time
值的人不会混淆他们的行。
答案 2 :(得分:0)
您是否尝试在select语句的末尾添加Order By PersonID, Date_Time
?
请注意,如果Date_Time
列是字符串而不是Date
字段,则对{{1}}列进行排序将无法正常工作。
提供您目前所做工作的代码示例,以便我们能够更清楚地了解您的问题,以便我们更有效地帮助您。
答案 3 :(得分:-1)
SELECT Date_Time,PersonID,[Status]
FROM TABLE1
GROUP BY Date_Time,PersonID,[Status]
ORDER BY PersonID,Date_Time