hello!
遇到个疑难问题,想不到好办法解决。不想用写存储过程,去遍历数据库,请教大家来帮忙看看。
sql查询m时间内,出现频度n以上的记录。例如:表中记录日期与天气,查询3天内出现2天雨以上的日期起期。
------解决方案--------------------
少了个参数
- SQL code
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才会得到正确的结果。
------解决方案--------------------