为了账号安全,请及时绑定邮箱和手机立即绑定

求助一个查询连续3天超库存的sql语句写法

求助一个查询连续3天超库存的sql语句写法

元芳怎么了 2018-12-07 04:43:16
现有一个stock库存表,共有四个字段:日期、门店、商品、超库存次数(正整数,最小为0值),示例数据如下:日期 门店 商品 超库存次数2011-05-01 001店 电视机 02011-05-01 002店 电视机 12011-05-01 003店 电视机 42011-05-02 001店 自行车 22011-05-02 002店 自行车 02011-05-03 001店 冰箱    72011-05-03 003店 冰箱    0... ... ... ...现在前端作了一个查询,查询条件是“开始日期、结束日期”两个条件,希望查出来的结果是:每家店每个商品的“连续三天超库次数”(只要"超库存次数"字段>0则代表当天超库了)。要求:从查询开始日进行计算,查询时要去除周六、周日,只计算周一至周五(循环计算),如果有连续三天"超库存次数"均大于0则计为1,如此累计示例如下:查询条件是从2011.05.03至2011.06.22,则某个门店+某个商品:2011.05.03 周二 超库存次数>02011.05.04 周三 超库存次数>02011.05.05 周四 超库存次数>0 计为1次2011.05.06 周五 超库存次数>02011.05.07 周六 跳过2011.05.08 周日 跳过2011.05.09 周一 超库存次数>02011.05.10 周二 超库存次数>0 计为2次,注意这个是跳过周六日后,上周五 +本周一 +本周二也算作1次2011.05.11 周三 超库存次数=02011.05.12 周四 超库存次数>02011.05.13 周五 超库存次数>02011.05.14 周六 跳过2011.05.15 周日 跳过2011.05.16 周一 超库存次数=02011.05.17 周二 超库存次数>02011.05.18 周三 超库存次数>02011.05.19 周四 超库存次数>0 计为3次,前面几个都没有连续3天2011.05.20 周五 超库存次数>0还请高手帮忙看下,非常感谢!
查看完整描述

10 回答

?
郎朗坤

TA贡献1921条经验 获得超9个赞

写存储过程吧,先将记录排个序,然后循环所有的记录,自己来计算超出库存的计数。

查看完整回答
反对 回复 2019-01-07
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

你要是把建表语句还有数据丢出来 还可以试试  不然谁那么人才

查看完整回答
反对 回复 2019-01-07
?
冉冉说

TA贡献1877条经验 获得超1个赞

多谢你的建议,我一会试试
查看完整回答
反对 回复 2019-01-07
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

试过了朋友,结果也不对。查不出数据来
查看完整回答
反对 回复 2019-01-07
?
森林海

TA贡献2011条经验 获得超2个赞

试试这个sql文

--日期  CreateTime
--门店 shop 
--商品 goods
--超库存次数 PerCount
SELECT temp.shop,temp.goods,ceiling(COUNT(1)*1.0/3) AS PerCount
FROM
(       
 SELECT  CreateTime,shop,Goods,StockCount
 FROM    testStock ts
 WHERE   stockCount > 0 AND (DATENAME(dw,CreateTime)<>'sunday' AND DATENAME(dw,CreateTime)<>'Saturday')
   AND EXISTS ( SELECT 1
       FROM   testStock
       WHERE  stockCount > 0
        AND ts.goods = goods
        AND
        (
         DATEDIFF(DAY, ts.CreateTime, CreateTime) = 1
         OR
         (
          DATENAME(dw,CreateTime)='Saturday' AND DATEDIFF(DAY, ts.CreateTime, CreateTime)=3
         )
        )
        )
   AND EXISTS ( SELECT 1
       FROM   testStock
       WHERE  stockCount > 0
        AND ts.goods = goods
        AND
        (
         DATEDIFF(DAY, ts.CreateTime, CreateTime) = 2
         OR
         (
          DATENAME(dw,CreateTime)='sunday' AND DATEDIFF(DAY, ts.CreateTime, CreateTime)=4
         )
        )
        )     
)
temp
GROUP BY temp.shop,temp.goods

查看完整回答
反对 回复 2019-01-07
?
浮云间

TA贡献1829条经验 获得超4个赞

我测试过,结果不对
查看完整回答
反对 回复 2019-01-07
?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

你好,

先分析下你的源数据表的格式是

超库存表 { 日期, 门店, 商品, 超库存次数 }

请问有为源表设置集聚索引(主键)吗?

 

然后你在说一下你具体需要得到的结果表的列数及他们的列名具体是什么要求?

毕竟

结果表 { 日期, 星期N, 超库存次数 }

这个应该不是你想要的结果表的规格!

查看完整回答
反对 回复 2019-01-07
?
www说

TA贡献1775条经验 获得超8个赞

请问某个门店+某个商品是指定的吗?

查看完整回答
反对 回复 2019-01-07
  • 10 回答
  • 0 关注
  • 832 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信