日期:2014-05-16  浏览次数:20870 次

sql查询m时间内,出现频度n以上的记录。例如:表中记录日期与天气,查询3天内出现2天雨以上的日期起期。
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才会得到正确的结果。
------解决方案--------------------
探讨
hello,xiaobn.
range函数的用法,能讲一下吗?