私は、営業日にのみ更新する毎日の価格表を持っています。私は、各月の最大日付のローリング6ヶ月ビューと、対応する先月末の最大日付を持つ最初の変数に基づいた2番目の変数を取得するための2つの動的日付変数を作成しようとしています(したがって、 )。SQL DB2動的日付選択ローリング先月の2番目の変数を使用して6か月
ここは私のコードですが、ここからどこに行くのかは分かりません。 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
あなたの助けを要求し、
EDIT:EOM5はカレンダー06/30/2016、EOM4はカレンダー07/31/2016ですので、データベース内のレコードを持つ2つの日付の間の最大日付は2016年7月29日であること:
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)
ありがとう、Esperento57。私は休日である日にもデータベースにレコードがないことを言及していたはずですので、1ヶ月の最大日付が休日である週の日に該当する場合、週末から1日または2日を引いた日付は機能しません。 Max関数で別の方法がありますか? – steveW
私はあなたの質問に答えたと思います。しかし、あなたが求めていることはさらに困難です。このシステムには休日を管理する機能はありません(休暇は国や地域などに依存するため実行できません)。あなたは休暇の始まりと終わりに、自分自身を休暇のテーブルにしてください。それで、最後の日がその間隔にある場合、休暇の日数を引くことを求めることができます。 – Esperento57
私はそれを働かせることはできません。私は実際に6ヶ月間の回転の1ヶ月以内にデータベースにある最大の日付を必要とします。更新された例を投稿しました。 – steveW