转换历史表以使用范围日期(从和到日期)而不是快照日期

时间:2015-01-16 11:01:10

标签: sql postgresql amazon-redshift

我希望在一个简单的SQL select语句中完成,而不需要任何该环境独有的函数(派生查询,公共表表达式,临时表INSERT,UPDATE语句都可以)。检查帖子末尾的标签,了解原因。

引用我的任何问题。我找不到像我一样清晰的标题,结果是stackoverflow。

用例示例 原始表:history_table_snapshot

Value|Date
50   |01
50   |02
24   |03
50   |04

转换表:history_table_range

Value|DateStart|DateEnd
50   |01       |03
24   |03       |04
50   |04       |infinity

此外,使此查询处理其他复杂/大规模的用例(即历史表中的50列,除了主键之外可能有一些列为null)

1 个答案:

答案 0 :(得分:1)

lag window function应该可以解决问题:

CREATE TABLE history_table_range
(Value, DateStart, DateEnd)
AS 
SELECT Value, Date, LAG (DATE) OVER (ORDER BY date DESC)

编辑:
正如Gordon Linoff在评论中指出的那样,使用lead会更加清晰:

CREATE TABLE history_table_range
(Value, DateStart, DateEnd)
AS 
SELECT Value, Date, LEAD (DATE) OVER (ORDER BY date)