SQL语句求连续天数

岁岁年年 2013-07-02 02:25:32
需求是这样的,有缺货表记录仓库缺货情况,表中记录的是缺货日期,存货编码,存货名称等等。要求:SQL语句查询出连续缺货3天以上的存货。
这里只展现两个字段,如下:
qdate(缺货日期) vcode(存货编码)
2013-06-01 A001
2013-06-02 A001
2013-06-02 B001
2013-06-05 A001
.................
如上图,A001虽然有三次记录,但是不是连续的,则不能取。同时,如果某存货一个月内存在多次连续3天以上缺货的,也要求能都反映出来。

求大侠指导,如果没空写代码,提思路也可,感谢!
...全文
1165 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
u010412956 2013-07-03
  • 打赏
  • 举报
回复
引用 6 楼 ybw_wang 的回复:
[quote=引用 1 楼 u010412956 的回复:]
select vcode
  from (select t.*,
               trunc(t.qdate - row_number()
                     over(partition by t.vcode order by t.qdate)) rn
          from t)
 group by vcode, rn
having count(1) >= 3;
哈哈,明白了。。。我的日期原来是字符格式,不是日期格式,刚才没明白您的思路,现在想明白了,OK了,结贴给分![/quote] 呵呵,明白就好。
岁岁年年 2013-07-03
  • 打赏
  • 举报
回复
引用 1 楼 u010412956 的回复:
select vcode
  from (select t.*,
               trunc(t.qdate - row_number()
                     over(partition by t.vcode order by t.qdate)) rn
          from t)
 group by vcode, rn
having count(1) >= 3;
哈哈,明白了。。。我的日期原来是字符格式,不是日期格式,刚才没明白您的思路,现在想明白了,OK了,结贴给分!
岁岁年年 2013-07-03
  • 打赏
  • 举报
回复
暂时没懂,我用里面一段
select t.*,row_number() over(partition by t.vcode order by t.qdate)) rn
from t

执行了是这样的:

然后您写的用日期去减序号,外层group by又没有聚合函数,我就不懂了,运行也提示无效数字,失败。
注:按照逻辑,只有标红的三行才算,因为这才是“连续三天”。
岁岁年年 2013-07-03
  • 打赏
  • 举报
回复
引用 3 楼 HJ_daxian 的回复:
可以根据每组上下2行的差值来分组 进行统计找出超过连续3个为1的数据
呵呵,就是不知道怎么“连续3”
  • 打赏
  • 举报
回复
可以根据每组上下2行的差值来分组 进行统计找出超过连续3个为1的数据
sych888 2013-07-02
  • 打赏
  • 举报
回复
楼上方法不错
u010412956 2013-07-02
  • 打赏
  • 举报
回复
select vcode
  from (select t.*,
               trunc(t.qdate - row_number()
                     over(partition by t.vcode order by t.qdate)) rn
          from t)
 group by vcode, rn
having count(1) >= 3;

17,078

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧