【发布时间】:2010-12-21 13:53:14
【问题描述】:
我有一张带有下表的表格。
----------------------------------
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,但这需要某种循环来检查一个小时的库存。
【问题讨论】:
-
你用的是什么数据库引擎?
-
您的 STOCK_TABLE 的亮点是什么?时间和地点?
-
数据库引擎是 teradata。对于 stock_table 小时,位置是整数,是主索引的一部分。你能告诉我jey这个词是什么意思吗?
-
virtually show the data是什么意思?只有我觉得这很有趣吗?似乎他想在有序列表中使用之前显示的图形。
标签: sql database-partitioning ansi-sql