Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL查询以生成如下所示的输出_Mysql - Fatal编程技术网

Mysql SQL查询以生成如下所示的输出

Mysql SQL查询以生成如下所示的输出,mysql,Mysql,我必须将预计的缺货项目和库存中的缺货日期可视化 我有一张表,可以显示该商品何时会脱销。此表显示了一周中每个星期一的预计库存 Item Location Projected Inventory Date A1 L1 0 Aug 20, 2018 A1 L1 0 August 27, 2018 A1 L1 54 Sep 03,2

我必须将预计的缺货项目和库存中的缺货日期可视化

我有一张表,可以显示该商品何时会脱销。此表显示了一周中每个星期一的预计库存

Item    Location    Projected     Inventory Date
A1         L1           0          Aug 20, 2018
A1         L1           0        August 27, 2018
A1         L1           54        Sep 03,20-18
A1         L1           49        Sep 10, 2018
A1         L1           44          Sep 17
A1         L1           39          Sep 24
A1         L1           32          Oct 1
A1         L1           25          Oct 8
A1         L1           18          Oct 15
A1         L1           12          Oct 22
A1         L1           5           Oct 29
A1         L1           55          Nov 5
A1         L1           45          Nov 12
如果项目:预计库存20,则认为该项目缺货

从表中可以看出,A1项于2018年8月20日缺货,2018年9月3日恢复库存。所需的输出表是:

Item    Location    PI    Date Out of Stock
A1       L1         0       Aug 20, 2018
A1       L1         18      Oct 15, 2018
这对我来说相当复杂。任何帮助都将不胜感激

问候,,
Prajwal

您可以使用MySQL 8.0+:

WITH cte AS (
  SELECT *, SUM(CASE WHEN Projected < 20 THEN 0 ELSE 1 END)
        OVER(PARTITION BY Item, Location ORDER BY Inventory_Date) AS subgrp
  FROM tab
), cte2 AS (
  SELECT *, ROW_NUMBER() 
          OVER(PARTITION BY Item, Location, subgrp ORDER BY Inventory_Date) AS rn
  FROM cte
)
SELECT *
FROM cte2
WHERE (Item, Location, subgrp,rn) IN (SELECT Item, Location, subgrp, MIN(rn) 
                                      FROM cte2 c 
                                      WHERE Projected < 20
                                      GROUP BY Item, Location, subgrp)
ORDER BY Inventory_Date;
它将为每个组选择低于20的第一个值,该组由低于20的项/位置/值的条纹组成。

尝试以下操作:

select @lag := 0;
select item, location, projected, `date` from (
    select @lag projectedLag, @lag:=projected,
           item, location, projected, `date`
    from tab
    order by `date`
) a where projectedLag >= 20 and projected < 20