Sql 选择:基于子选择添加列
我有以下情况: 使用SQLDbx-database:DB2 下面的SQLSql 选择:基于子选择添加列,sql,select,db2,Sql,Select,Db2,我有以下情况: 使用SQLDbx-database: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
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,最后一个截止日期必须始终为2010-09-30
显然,我在编写SQL方面不是很熟练,希望有人能给我指出正确的方向——甚至更好——提供一个解决方案:)
我确实找了一段时间,但我真的找不到我要找的东西
干杯,德里特。使用新的
LEAD
功能。
更多关于它
也许:
谢谢不幸的是,看起来我们的DB有点像石器时代的……它不喜欢铅(或者至少是9.7之前的铅)忘记考虑这样的解决方案。应该可以在大多数平台上正常工作。有用的解决方案。谢谢
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 fcode
, edate AS edate_from
, LEAD (edate) OVER (ORDER BY edate) AS edate_to
, idx
, price
FROM priceanddates
WHERE fcode='XYZ'
ORDER BY edate
WITH priceanddates AS
(
SELECT a.*,
(SELECT COALESCE(MIN(aa.edate), '2010-09-30')
FROM FPRICE aa
WHERE aa.edate > a.edate) AS edate_to
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