【发布时间】:2017-11-20 09:19:45
【问题描述】:
我有一组数据,其中包含 2 个字段“ActivationTime”,即 DATETIME 类型和“Score”,即 INT 类型。
我想按照这个规则对所有数据进行分组:
(1) 每组数据之间必须有最大5天的差异(对应于“ActivationTime”值。注意第一个“ActivationTime”是一组数据中最新的“ActivationTime”。例如在下面示例第一个“ActivationTime”将为“2017-11-24 09:45:00.000”,其得分 = 1)
(2) 分组数据各部分中的项目必须按“分数”值与其他分组数据部分“分开”排序
如果可以的话,有人可以帮助我吗?
编辑:例如想象@ExampleTabel 如下:
Score ActivationTime
-------------------------------------------
9 '2017-11-20 09:37:00.000'
5 '2017-11-21 09:39:00.000'
4 '2017-11-22 09:40:00.000'
3 '2017-11-23 09:43:00.000'
1 '2017-11-24 09:45:00.000'
12 '2017-11-22 09:49:00.000'
7 '2017-11-17 09:38:00.000'
2 '2017-11-15 09:41:00.000'
0 '2017-11-14 09:44:00.000'
15 '2017-11-13 09:47:00.000'
7 '2017-11-12 09:46:00.000'
20 '2017-11-11 09:42:00.000'
4 '2017-11-10 09:78:00.000'
我除了要生成的结果:
Score ActivationTime Category
---------------------------------------------------------------
12 '2017-11-20 09:49:00.000' 1
9 '2017-11-20 09:37:00.000' 1
5 '2017-11-21 09:39:00.000' 1
4 '2017-11-22 09:40:00.000' 1
3 '2017-11-23 09:43:00.000' 1
1 '2017-11-24 09:45:00.000' 1
15 '2017-11-13 09:47:00.000' 2
7 '2017-11-17 09:38:00.000' 2
2 '2017-11-15 09:41:00.000' 2
0 '2017-11-14 09:44:00.000' 2
20 '2017-11-11 09:42:00.000' 3
7 '2017-11-12 09:46:00.000' 3
3 '2017-11-20 09:37:57.570' 3
4 '2017-11-10 09:78:00.000' 3
【问题讨论】:
-
所以您想要每天的前 5 名分数,按分数排序?
-
不,我想订购与其他组部分分开的组部分中存在的所有数据,我也不想获得任何前 N 分。我的意思是首先按“ActivationTime”排序,然后按“Score”排序,但查询结果必须在其时间组中切片。
-
你的问题很不清楚。你想要什么?如果您只是想按您的组进行切片,请使用 CTE,然后按分数和激活时间排序。
标签: sql-server tsql group-by sql-order-by