如何在列小于 0 时计算 SQL 中的总时间

How To Calculate Total Time In SQL When Column Is Less Than 0

我在 SQL 中有一个 table 看起来像下面的屏幕截图,我正在尝试计算 StockLevel 列小于或等于 0 的总小时数或天数。

我试图从项目大于 0 的时间减去项目 <= 0 的时间,然后 SUM 所有时间,但我一直无法做到。

我希望能够通过减去时间戳来添加某项小于 0 的一个月中的总小时数。

DATE_DIFF((CURRENT_DATE), MAX(DATE(ledger.EventTimeStamp)), DAY) AS Days_OutOfStock,

谢谢!

您可以使用 LAG 函数查找每个时期的库存水平:

SELECT ItemID, StockLevel, EventTimeStamp AS lo,
       LEAD(EventTimeStamp,1) OVER (PARTITION BY itemId ORDER BY EventTimeStamp) AS hi

那应该给你:

ItemID StockLevel lo               hi
536    205        2019-11-05 10:01 null
536    206        2019-11-05 09:37 2019-11-05 10:01

然后您可以使用该输出来查找负库存水平和时间量

SELECT ItemId, DATEDIFF(HOUR,hi,lo) AS p
  FROM (
        SELECT ItemID, StockLevel, EventTimeStamp AS lo,
          LEAD(EventTimeStamp,1) OVER (PARTITION BY itemId ORDER BY EventTimeStamp) AS hi
  )
 WHERE StockLevel < 0

您应该能够按 ItemID 按月对小时数求和