是在稀疏数据中生成缺失行的有效方法

时间:2016-08-25 15:50:26

标签: sql postgresql

我有一个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"

完成

1 个答案:

答案 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

如果您的表具有单个计数列,其行数多于最终结果中的行数,则也可以使用视图执行此操作。但是我会把这个实现留给你 - 或者你可以在评论中询问是否需要它。