我有一个SQL表,其中的行代表10分钟吧:
CREATE TABLE "P_Data"
(
"Date" timestamp without time zone NOT NULL,
"Value" double precision,
)
数据稀少:
00:10:00, 73
00:20:00, 74
00:40:00, 71
我希望能够生成带有最后一个值的缺失行:
00:10:00, 73
00:20:00, 74
00:30:00, 74
00:40:00, 71
我如何实现这一目标 - 可以通过" VIEW"
完成答案 0 :(得分:0)
您可以使用递归CTE执行此操作。
假设您的表名为P_Data,这样的查询将如下所示:
-- first get the min and max for the range
WITH minmax as
(
SELECT min(Date) as min_date, max(Date) as max_date
FROM P_Data
), base_list as -- now build a list of all our timestamps, recursively
(
SELECT min_date as date_item
FROM minmax
UNION ALL
SELECT date_item + 10 minutes as date_item
FROM base_list, minmax
WHERE date_item + 10 minutes < date_max
)
-- now join this to our data
SELECT date_item, Value
FROM base_list
LEFT JOIN P_Data on base_list.date_item = P_Data.Date
如果您的表具有单个计数列,其行数多于最终结果中的行数,则也可以使用视图执行此操作。但是我会把这个实现留给你 - 或者你可以在评论中询问是否需要它。