SQL Server 标识日期时间列中日期范围的等级

bttbmeg0  于 2022-12-03  发布在  其他
关注(0)|答案(2)|浏览(160)

我有成员、他们所属的组和他们活动的日期时间。我想找出哪些成员的日期间隔超过3个月,我需要对他们进行排名。
| 标题1|标题2|创建日期|等级|
| - -|- -|- -|- -|
| 小行星11111|企业资产管理|2022年01月27日12时23分|一个|
| 小行星11111|企业资产管理|2022-08-25 10:41:15.5亿美元|2个|
| 小行星11111|企业资产管理|2022年9月1日18时15分|2个|
| 小行星11111|企业资产管理|2022年09月08日13时03分|2个|
| 小行星11111|企业资产管理|2022年10月6日18时15分|2个|
| 小行星11111|质子交换膜|2022-07-25 10:41:15.5亿美元|一个|
| 小行星11111|质子交换膜|2022-08-25 10:41:15.5亿美元|一个|
| 小行星11111|质子交换膜|2022年09月26日13时03分|一个|
所期望的结果是上面的同等级;该表包含没有Rank列的数据。

gorkyyrv

gorkyyrv1#

一种方法是使用LAG获取先前日期,比较两个日期,如果超过3个月,则返回1,然后使用SUM将这些值进行窗口聚合:

WITH CTE AS(
    SELECT header1,
           header2,
           CreateDate,
           CASE WHEN DATEDIFF(MONTH,LAG(CreateDate) OVER (PARTITION BY header2 ORDER BY CreateDate),CreateDate) > 3 THEN 1 ELSE 0 END AS Counter
    FROM (VALUES(11111,'EAM',CONVERT(datetime2(7),'2022-01-27 12:23:28.474000000')),
                (11111,'EAM',CONVERT(datetime2(7),'2022-08-25 10:41:15.500000000')),
                (11111,'EAM',CONVERT(datetime2(7),'2022-09-01 18:15:07.362000000')),
                (11111,'EAM',CONVERT(datetime2(7),'2022-09-08 13:03:38.859000000')),
                (11111,'EAM',CONVERT(datetime2(7),'2022-10-06 18:15:07.245000000')),
                (11111,'PEM',CONVERT(datetime2(7),'2022-07-25 10:41:15.500000000')),
                (11111,'PEM',CONVERT(datetime2(7),'2022-08-25 10:41:15.500000000')),
                (11111,'PEM',CONVERT(datetime2(7),'2022-09-26 13:03:38.859000000')))V(header1,header2,CreateDate))
SELECT header1,
       header2,
       CreateDate,
       SUM(Counter) OVER (PARTITION BY header2 ORDER BY CreateDate) + 1 AS Rank
FROM CTE;
zf9nrax1

zf9nrax12#

select  header1 
       ,header2 
       ,Create_Date
       ,dense_rank() over(partition by header1, header2 order by flg) as Rank
from
(
select  *
       ,case when datediff(month, Create_Date, lead(Create_Date) over(partition by header1, header2 order by Create_Date)) >= 3 then 0 else 1 end as flg
from    t
) t

| 标题1|标题2|创建日期(_D)|等级|
| - -|- -|- -|- -|
| 小行星11111|企业资产管理|2022年1月27日12时23分28.000秒|一个|
| 小行星11111|企业资产管理|2022年8月25日10时41分15000秒|2个|
| 小行星11111|企业资产管理|2022年9月1日18时15分07秒|2个|
| 小行星11111|企业资产管理|2022年9月8日13时03分38秒000秒|2个|
| 小行星11111|企业资产管理|2022年10月6日18时15分07秒|2个|
| 小行星11111|质子交换膜|2022年7月25日10时41分15000秒|一个|
| 小行星11111|质子交换膜|2022年8月25日10时41分15000秒|一个|
| 小行星11111|质子交换膜|2022年9月26日13时03分38秒000秒|一个|
Fiddle

相关问题