【发布时间】:2017-03-28 19:51:36
【问题描述】:
我有一个仅在工作日更新的每日价格表。我正在尝试创建两个动态日期变量,它们允许我提取每个月的最大日期的滚动 6 个月视图,以及基于第一个变量的第二个变量,该变量具有相应的上个月末最大日期(所以基本上是 7 个月末)。
这是我的代码,但我不知道从哪里开始。我应该使用 DATEDIFF 或 GROUP BY 之类的函数,然后在 MONTH 上使用 PARTITION,还是创建一个排序器并开始计算行数?非常感谢任何帮助!
WITH dtt as (SELECT
CURRENT_DATE - DAY(CURRENT_DATE) DAYS V_EOM1,
CURRENT_DATE - (DAY(CURRENT_DATE)-1) DAYS - 1 MONTH - 1 DAY V_EOM2
FROM SYSIBM.SYSDUMMY1)
SELECT
dph.ID,
V_EOM1,
dph.AMT_PRCE AS PRICE,
V_EOM_LAST,
fpr2.AMT_PRCE AS LAST_PRICE
FROM dtt LEFT JOIN
UDBADM.D_PRICE_HIST dph
ON dph.DT_PRCE = V_EOM1 LEFT JOIN
UDBADM.D_PRICE_HIST dph2
ON dph.ID = dph2.ID AND dph2.DT_PRCE = dtt.V_EOM_LAST
WHERE dph.ID = '444128'
如果我只是从上个月(最后一个)月的月底开始滚动 1 个月,这就是我目前得到的结果:
ID V_EOM PRICE V_EOM_LAST LAST_PRICE
444128 10/31/2016 2700 09/30/2016 2600
这是我试图通过拉动每个月的最大日期的滚动 6 个月来实现的(注意 4 月和 7 月的月末落在周末,所以最大日期不是该月的最后一个日历日):
ID V_EOM PRICE V_EOM_LAST LAST_PRICE
444128 05/31/2016 2550 04/29/2016 2750
444128 06/30/2016 2500 05/31/2016 2550
444128 07/29/2016 2400 06/30/2016 2500
444128 08/31/2016 2650 07/29/2016 2400
444128 09/30/2016 2600 08/31/2016 2650
444128 10/31/2016 2700 09/30/2016 2600
请求您的帮助和指导
编辑:如果更像这样的话,EOM5 是日历 06/30/2016,EOM4 是日历 07/31/2016,所以在这两个日期之间找到的最大日期是 07 /29/2016:
SELECT
MAX(DT_PRCE) AS "Max_Date_EOM4"
FROM UDBADM.D_PRICE_HIST
WHERE DT_PRCE BETWEEN
(SELECT CURRENT DATE -(DAY(CURRENT_DATE)-1) DAYS - 4 MONTH - 1 DAY
AS "EOM5" FROM SYSIBM.SYSDUMMY1)
AND (SELECT CURRENT_DATE - (DAY(CURRENT_DATE)-1) DAYS - 3 MONTH - 1 DAY
AS "EOM4" FROM SYSIBM.SYSDUMMY1)
【问题讨论】:
标签: sql date variables db2 sequence