2015-01-16 30 views
1

我希望在一個簡單的SQL select語句內完成,而不包含任何對該環境唯一的函數(派生查詢,公用表表達式,temp表INSERT,UPDATE語句可以)。在帖子末尾查看我的標籤以瞭解原因。轉換歷史表以使用範圍日期(從和到日期)而不是快照日期

引用任何有問題的問題。我無法找到與我的結果一樣清晰的標題。的使用情況下

例 原稿臺: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列中的其它複雜/高比例的用例歷史表可能會出現一些列,除了主鍵爲空)

+0

是否亞馬遜紅移有'鉛()'和'滯後()'? –

+0

@a_horse_with_no_name。 。 。是的,它確實。 –

+0

編輯轉換表的值。對困惑感到抱歉。 – softdevlife

回答

1

lagwindow function應該做的伎倆:

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

編輯:
正如戈登·利諾夫在評論中指出的那樣,只是用lead會更清潔:

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

我覺得這很有趣。你有沒有這樣做的理由:'領導(日期)結束(按日期排序)'? –

+0

我從'lag'開始,運行查詢,發現我的訂單已經顛倒過來。正如你所指出的 - 只需用'lead'替換'lag'會更有意義。多麼令人討厭的[知覺失明]的例子(http://en.wikipedia.org/wiki/Inattentional_blindness)。 – Mureinik

+0

一個更乾淨的選項可能是first_value和last_value,而不是專門用於偏移計算的lead或lag。 – Guy