【发布时间】:2018-11-29 00:20:07
【问题描述】:
我的合同价格在每年 4 月 1 日发生变化。合同的开始日期和结束日期可能会跨越多个价格变化,最初我想计算合同开始日期和合同结束日期之间的变化。
这是我想要得到的结果集:
2017 年 1 月 4 日至 2018 年 3 月 31 日 = 0
31/03/2018 至 01/04/2018 = 1
01/01/2015 至 31/12/2018 = 4
目前我的查询看起来像这样(手动可怕):
SET DATEFORMAT DMY;
SELECT
Contract_ID,
(Period_1 + Period_2 + Period_3 + Period_4 + Period_5 + Period_6 + Period_7
+ Period_8 + Period_9
) AS Split_Count
FROM
(
SELECT
C.Contract_ID,
CASE
WHEN ('01/04/2011'BETWEEN Contract_Date_OLD AND Contract_Date_NEW) THEN 1
ELSE 0
END AS Period_1,
CASE
WHEN ('01/04/2012'BETWEEN Contract_Date_OLD AND Contract_Date_NEW) THEN 1
ELSE 0
END AS Period_2,
CASE
WHEN ('01/04/2013'BETWEEN Contract_Date_OLD AND Contract_Date_NEW) THEN 1
ELSE 0
END AS Period_3,
CASE
WHEN ('01/04/2014'BETWEEN Contract_Date_OLD AND Contract_Date_NEW) THEN 1
ELSE 0
END AS Period_4,
CASE
WHEN ('01/04/2015'BETWEEN Contract_Date_OLD AND Contract_Date_NEW) THEN 1
ELSE 0
END AS Period_5,
CASE
WHEN ('01/04/2016'BETWEEN Contract_Date_OLD AND Contract_Date_NEW) THEN 1
ELSE 0
END AS Period_6,
CASE
WHEN ('01/04/2016'BETWEEN Contract_Date_OLD AND Contract_Date_NEW) THEN 1
ELSE 0
END AS Period_7,
CASE
WHEN ('01/04/2017'BETWEEN Contract_Date_OLD AND Contract_Date_NEW) THEN 1
ELSE 0
END AS Period_8,
CASE
WHEN ('01/04/2018'BETWEEN Contract_Date_OLD AND Contract_Date_NEW) THEN 1
ELSE 0
END AS Period_9
FROM Contract C
最好的方法是什么?
【问题讨论】:
-
样本数据和期望的结果真的很有帮助。
-
样本数据和结果在查询上方的结果集中。它没有标题,但第一个日期是开始日期,第二个日期是结束日期,数字是跨越 01/04/xx 日期的数量。抱歉,我应该把它放在整洁的桌子上。