日期:2014-05-16 浏览次数:20870 次
select makedate from (select makedate, sum(decode(weather,'雨',1,0)) over(order by makedate rows between 0 preceding and 2 following) dd from TA) where dd>=2
------解决方案--------------------
rows :窗口单位按行取
0 preceding 按照排序向前取0行 相当于currentrow
2 following 按照排序向后取2行
所以每行的窗口取到了本行+后两行,用decode计算出这三行几天有雨
------解决方案--------------------
应当使用窗口函数,但是不应当使用between,而应当使用range才对。除非保证数据中每天都有1条记录,并且每天都只能有1条记录,时between才会得到正确的结果。
------解决方案--------------------