繁体   English   中英

如何编写SQL查询以对数据集进行排序或分组

[英]How to write a sql query to Sort or Group the dataset

我在表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第一行日期时间'4/1/2014 9:15:00 AM'大于memberID: def 1st row date_Time'4 / 1/2014 9:17:00 AM'以黄色突出显示。 这就是memberID ghi将调整设置为第一组然后跟随memberID def set然后meberID abcjkl ...等的主要原因 ...

在此输入图像描述

有人可以帮我如何编写MS-SQL查询来实现最终结果。

非常感谢你的帮助。

如果我正确理解你的问题,你需要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

这是另一种方式

SELECT
  Date_Time,
  PersonID,
  Status
FROM
  dbo.atable
ORDER BY
  MIN(Date_Time) OVER (PARTITION BY PersonID),
  PersonID,
  Date_Time
;

不过,这种方法与sgeddes的答案相同,它只是有不同的语法。 它使用MIN(...) OVER (...)计算最小Date_Time值。 这使得对派生表的连接完全没有必要。

另一个小区别是我已经将PersonID添加到ORDER BY子句中,以确保具有相同最小Date_Time值的人不会混淆他们的行。

您是否尝试在select语句的末尾添加Order By PersonID, Date_Time

请注意,如果Date_Time列是字符串而不是Date字段,则对Date_Time列进行排序将无法正常工作。

提供您目前所做工作的代码示例,以便我们能够更清楚地了解您的问题,以便我们更有效地帮助您。

    SELECT Date_Time,PersonID,[Status] 
    FROM TABLE1
    GROUP BY Date_Time,PersonID,[Status] 
    ORDER BY PersonID,Date_Time

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM