我正在尝试在查询中基于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)
答案 0 :(得分:0)
select
ThreadSourceKey,
CourseNumber,
[Date],
ReadCount,
Date_Position = row_number() over (partition by ThreadSourceKey order by [Date])
from
(your sql statement) a
答案 1 :(得分:0)
假设您的查询工作正常,添加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