我有以下情况:
使用 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)
数据库中所有日期的最终截止日期是 2010 年 9 月 30 日,可惜最后一个 edate_to 必须始终是 2010 年 9 月 30 日。
显然,我在编写 SQL 方面不是很熟练,希望有人能指出我正确的方向 - 甚至更好 - 提供解决方案:) 我确实在 SO 周围搜索了一段时间,但我真的找不到什么我在寻找...
干杯,德里特。