SQL:按日期对列进行排序/分组

蓝九

使用SQL Server Management Studio v17.9.1

我正在尝试按“站点”和“区域”和“日期”对某些数据进行排名/排序/分组,但我一直在努力使自己无法按字母顺序对区域进行排名,并按出现的最早日期对其进行排名。

这是我的数据:

Site   |   Area   |   Space   |   Date
DCG        X          7           02/02/2020 12:13
DCG        X          5           04/02/2020 11:47
DCG        X          12          10/02/2020 15:14
GNL        U          0           03/03/2020 18:35
GNL        A          4           04/03/2020 08:28
GNL        C          4           06/03/2020 09:07
GNL        B          1           16/03/2020 07:10
DPL        U          0           18/03/2020 09:28
DPL        A          1           18/03/2020 09:36
DPL        A          1           20/03/2020 20:04
SGR        F          2           21/03/2020 19:42
SGR        B          2           22/03/2020 10:30
SGR        C          3           24/03/2020 08:17
SGR        F          1           01/04/2020 09:00
SGR        E          1           02/02/2020 10:57
SGR        F          1           02/02/2020 15:50

我想添加2列,以按日期的升序对网站和区域进行排名/分组,如下所示:

Site   |   Area   |   Space   |   Date              |   Site Order   |   Area Order   |
DCG        X          7           02/02/2020 12:13         1                 1
DCG        X          5           04/02/2020 11:47         1                 1
DCG        X          12          10/02/2020 15:14         1                 1
GNL        U          0           03/03/2020 18:35         2                 1
GNL        A          4           04/03/2020 08:28         2                 2
GNL        C          4           06/03/2020 09:07         2                 3 
GNL        B          1           16/03/2020 07:10         2                 4
DPL        U          0           18/03/2020 09:28         3                 1
DPL        A          1           18/03/2020 09:36         3                 2 
DPL        A          1           20/03/2020 20:04         3                 2
SGR        F          2           21/03/2020 19:42         4                 1
SGR        B          2           22/03/2020 10:30         4                 2
SGR        C          3           24/03/2020 08:17         4                 3
SGR        F          1           01/04/2020 09:00         4                 1
SGR        E          1           02/02/2020 10:57         4                 4
SGR        F          1           02/02/2020 15:50         4                 1

很抱歉,如果我不清楚的话

戈登·利诺夫

您可以min()用作窗口函数来获取每个站点和站点/区域组合的最短日期。然后使用dense_rank()

select t.*,
       dense_rank() over (order by min_site_date, site) as site_seqnum,
       dense_rank() over (partition by site order by min_site_date) as area_seqnum
from (select t.*,
             min(date) over (partition by site) as min_site_date,
             min(date) over (partition by site, area) as min_site_area_date
      from t
     ) t

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章