如何在列小于 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 按月对小时数求和
我在 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 按月对小时数求和