次のシナリオがあります。
SQLDbx の使用 - データベース: DB2
次の SQL
WITH priceanddates AS
(
SELECT a.*
FROM FPRICE a
INNER JOIN
(
SELECT edate, MAX(idx) maxIdx
FROM FPRICE
WHERE price>0
GROUP BY edate
) b ON a.edate = b.edate AND a.idx = b.maxIdx
)
SELECT *
FROM priceanddates
WHERE fcode='XYZ'
ORDER BY edate
収量:
fcode edate idx price
XYZ 2010-09-17 2 34,3
XYZ 2010-09-20 2 34,3
XYZ 2010-09-21 2 34,3
XYZ 2010-09-22 2 34,3
XYZ 2010-09-23 2 35,7
XYZ 2010-09-24 2 34,5
XYZ 2010-09-27 2 35,5
しかし-もっと何かが必要です...次のように、日付の有効性について何かを言う最後の選択に列を追加したいと思います:
fcode edate_from edate_to idx price
XYZ 2010-09-17 2010-09-20 2 34,3
XYZ 2010-09-20 2010-09-21 2 34,3
XYZ 2010-09-21 2010-09-22 2 34,3
XYZ 2010-09-22 2010-09-23 2 34,3
XYZ 2010-09-23 2010-09-24 2 35,7
XYZ 2010-09-24 2010-09-27 2 34,5
XYZ 2010-09-27 2010-09-30 2 35,5
したがって、edate_to は「次の」edate_from に基づいています (ビューは現在日付順に並べられているため)、または (うまくいけば正しく推測したように) edate_to は単に MIN (「現在の」edate より大きい edate) です。
DB 内のすべての日付の最終締切日は 2010-09-30 ですが、最後の edate_to は常に 2010-09-30 でなければなりません。
明らかに、私はSQLを書くことに関してはあまり熟練していません。うまくいけば、誰かが私を正しい方向に向けることができます.探していた...
乾杯、ドリット。