首页 > 解决方案 > 如何将日期划分为静态时段

问题描述

我有一个日期列,我必须将其分为两个已建立的组(组 A 和组 B),每组 14 天无限期地穿插。

例如,日期 '2021-04-09' 和 '2021-04-22' 对应Group A,日期 '2021-04-23' 和 '2021-05-06' 对应Group B, '2021-05-07' 和 '2021-05-20' 之间的日期对应于A 组,依此类推。

我想制作一个额外的列,它计算某个日期是在 A 组还是 B 组中。

CREATE TABLE dates (
  date DATE
);

INSERT INTO dates VALUES ('2021-04-20');
INSERT INTO dates VALUES ('2021-04-21');
INSERT INTO dates VALUES ('2021-04-22');
INSERT INTO dates VALUES ('2021-04-23');
INSERT INTO dates VALUES ('2021-04-24');
INSERT INTO dates VALUES ('2021-04-25');

预期结果:

日期 团体
2021-04-20 A组
2021-04-21 A组
2021-04-22 A组
2021-04-23 B组
2021-04-24 B组
2021-04-25 B组

抱歉,我第一次无法尝试提出问题。我能做的最好的就是静态地放置所有日期。我什至不知道它是否可以通过计算的方式完成。

select date, 
CASE 
WHEN (date between '2021-04-20' and '2021-04-22') THEN 'GROUP A'
WHEN (date between '2021-04-23' and '2021-04-25') THEN 'GROUP B'
ELSE 'UNKNOWN' END as group
from dates

标签: sqlsql-server

解决方案


假设基准日期是2021-04-09

例子

Select *
      ,Grp = 'Group ' + char(65 + (datediff(day,'2021-04-09',date) / 14 ) % 2 )
 From  @dates

结果

date        Grp
2021-04-20  Group A
2021-04-21  Group A
2021-04-22  Group A
2021-04-23  Group B
2021-04-24  Group B
2021-04-25  Group B

推荐阅读