我有一张带有下表的表格。
----------------------------------
Hour Location Stock
----------------------------------
6 2000 20
9 2000 24
----------------------------------
因此,这显示了在数量发生变化的某些小时内的库存。现在我的要求是在此表上创建一个视图,该视图将虚拟显示数据(如果特定小时内的库存不充足)。所以应该显示的数据是
----------------------------------
Hour Location Stock
----------------------------------
6 2000 20
7 2000 20 -- same as hour 6 stock
8 2000 20 -- same as hour 6 stock
9 2000 24
----------------------------------
这意味着即使某个特定小时的数据不存在,我们也应该显示最后一小时的库存。我有另一个表格,列中有从 1 到 23 的所有可用时间。
我已经尝试通过下面给出的方法进行分区。但我认为我在这方面缺少一些东西来完成我的要求。
SELECT
HOUR_NUMBER,
CASE WHEN TOTAL_STOCK IS NULL
THEN SUM(TOTAL_STOCK)
OVER (
PARTITION BY LOCATION
ORDER BY CURRENT_HOUR ROWS 1 PRECEDING
)
ELSE
TOTAL_STOCK
END AS FULL_STOCK
FROM
(
SELECT HOUR_NUMBER AS HOUR_NUMBER
FROM HOURS_TABLE -- REFEERENCE TABLE WITH HOURS FROM 1-23
GROUP BY 1
) HOURS_REF
LEFT OUTER JOIN
(
SEL CURRENT_HOUR AS CURRENT_HOUR
, STOCK AS TOTAL_STOCK
,LOCATION AS LOCATION
FROM STOCK_TABLE
WHERE STOCK<>0
) STOCKS
ON HOURS_REF.HOUR_NUMBER = STOCKS.CURRENT_HOUR
对于没有数据的时间,此查询将所有带库存的时间设为空。我们正在研究 ANSI sql 解决方案,以便它可以用于 Teradata 等数据库。
我在想我错误地使用了分区,或者还有其他方法。我们尝试了 CASE WHEN ,但这需要某种循环来检查一个小时的库存。