簡體   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