簡體   English   中英

基於列的SQL行順序

[英]SQL Row Order based on Columns

我正在嘗試在查詢中基於THREADPK1和Date列實現一個訂單列。

示例結果(末尾的所需列稱為date_position:

ThreadSourceKey   CourseNumber         Date      ReadCount   Date Position
1518055            0701117023LFC    2016-08-24      18            1
1522610            0701117023LFC    2016-08-24      2             1
5443433            0701117023LFC    2016-08-25      1             1
5443433            0701117023LFC    2016-08-27      1             2
5443344            0701117023LFC    2016-08-21      1             1
5443344            0701117023LFC    2016-08-20      1             2

這是我的疑問:有興趣知道如何合並日期位置的排序。

SELECT DISTINCT rs.threadsourcekey, 
                dc.coursenumber, 
                CONVERT (DATE, rs.modifieddate, 103) AS 'Date', 
                Sum(rs.recentreadcount)              AS ReadCount 
FROM   customfinal.rsreportingfactforumreadcounts rs 
       INNER JOIN #threads threads 
               ON rs.threadsourcekey = threads.threadsourcekey 
       INNER JOIN final.dimcourse dc 
               ON rs.coursekey = dc.coursekey 
WHERE  rs.coursekey = @CourseKey 
       AND rs.modifieddate >= Dateadd(day, -7, @DefaultDate) 
       AND rs.usersourcekey >- 1 
       AND rs.recentreadcount <> 0 
GROUP  BY rs.threadsourcekey, 
          dc.coursenumber, 
          CONVERT (DATE, rs.modifieddate, 103) 
select
ThreadSourceKey,
CourseNumber,
[Date],
ReadCount,
Date_Position = row_number() over (partition by ThreadSourceKey order by [Date])
from
(your sql statement) a

假設您的查詢工作正常,添加ROW_NUMBER()可以得到您想要的。

請注意,由於GROUP BY具有CONVERT (DATE, rs.modifieddate, 103)您需要使用它來進行分區。

SELECT DISTINCT rs.threadsourcekey, 
                dc.coursenumber, 
                CONVERT (DATE, rs.modifieddate, 103) AS 'Date', 
                Sum(rs.recentreadcount)              AS ReadCount,
               ROW_NUMBER() OVER (partition by rs.threadsourcekey order by CONVERT (DATE, rs.modifieddate, 103)) AS [DATE POSITION]

FROM   customfinal.rsreportingfactforumreadcounts rs 
       INNER JOIN #threads threads 
               ON rs.threadsourcekey = threads.threadsourcekey 
       INNER JOIN final.dimcourse dc 
               ON rs.coursekey = dc.coursekey 
WHERE  rs.coursekey = @CourseKey 
       AND rs.modifieddate >= Dateadd(day, -7, @DefaultDate) 
       AND rs.usersourcekey >- 1 
       AND rs.recentreadcount <> 0 
GROUP  BY rs.threadsourcekey, 
          dc.coursenumber, 
          CONVERT (DATE, rs.modifieddate, 103) 

如果你想選擇它並看看它是如何工作的,這是一個片段。

SELECT  threadsourcekey, 
        ModDate AS 'Date', 
        Sum(ReadCount)              AS ReadCount ,
        ROW_NUMBER() OVER (partition by threadsourcekey order by ModDate) AS [DATE POSITION]
FROM   
    ( VALUES 
        (1518055,          '2016-08-24',      1),
        (1518055,          '2016-08-24',      1),
        (1518055,          '2016-08-24',      1),  
        (1522610,          '2016-08-24',      1),
        (1522610,          '2016-08-24',      1), 
        (5443433,          '2016-08-25',      1),
        (5443433,          '2016-08-27',      1),
        (5443344,          '2016-08-21',      1),
        (5443344,          '2016-08-20',      1)
    ) As Tbl (ThreadSourceKey, ModDate,     ReadCount)

GROUP  BY threadsourcekey,           
          ModDate

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM