当前位置: 代码迷 >> Oracle技术 >> sql查询m时间内,出现频度n之上的记录。例如:表中记录日期与天气,查询3天内出现2天雨以上的日期起期
  详细解决方案

sql查询m时间内,出现频度n之上的记录。例如:表中记录日期与天气,查询3天内出现2天雨以上的日期起期

热度:278   发布时间:2016-04-24 08:41:43.0
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函数的用法,能讲一下吗?
  相关解决方案