問題我有一個包含以下各列的表格:與滯後功能(DB2)
userid Designation load_dt audit_time type
A Engg 3/11/2015 22/06/2015 R
A Engg 4/11/2015 03/07/2015 D
A Engg 31/12/9999 4/10/2015 R
A doc 31/12/9999 22/06/2015 R
我試圖通過跟蹤用戶標識和名稱的基礎上audit_time的變化來創建輸出。對於第一行,開始日期將是01-01-1900,如果沒有其他記錄存在,則結束日期將是12-31-9999。對於userid = A,由於更改發生在2015年7月3日,因此第一條記錄的起始日期從01/01/1900開始,並於2015年7月3日結束。第二條記錄的起始日期爲2015年7月3日,並且保持有效,直到2015年10月4日。第三次更改從2015年10月4日開始,並有未來結束日期。
userid Designation load_dt audit_time type start_date end_date
A Engg 3/11/2015 22/06/2015 R 01/01/1900 03/07/2015
A Engg 4/11/2015 03/07/2015 D **03/07/2015 4/10/2015
A Engg 31/12/9999 4/10/2015 R **4/10/2015 31/12/9999
A doc 31/12/9999 22/06/2015 R 01/01/1900 31/12/9999
我用下面的查詢:
select userid, designation, LOAD_DT, AUDIT_TIME, TYPE
, coalesce(lag(AUDIT_TIME) over (partition by userid, designation order by AUDIT_TIME),'1900-01-01') start
, coalesce(lead(AUDIT_TIME) over (partition by userid, designation order by AUDIT_TIME),'9999-12-31') enddt
from DUMMY1;
我得到以下結果:
userid Designation load_dt audit_time type start_date end_date
A Engg 3/11/2015 22/06/2015 R 01/01/1900 03/07/2015
A Engg 4/11/2015 03/07/2015 D **22/06/2015 4/10/2015
A Engg 31/12/9999 4/10/2015 R **03/07/2015 31/12/9999
A doc 31/12/9999 22/06/2015 R 01/01/1900 31/12/9999
我希望我能夠正確地解釋我的問題。
任何幫助傢伙... –
很顯然,你從別的粘貼這一點,因爲你的語句有語法錯誤(你沒有定義別名's',並且對審計列使用兩個不同的名稱)。否則......你確定這些是你想要的結果嗎?通常情況下,第一行代表插入,因此無論在哪一點之前都不存在 - 通常您要麼使用「當前」值,要麼添加一行(在「我們有信息之前」) –
我意外地忘記刪除「s」,我的擔心更多地與數據相關,而不是語法錯誤。我的壞名字被抄襲了。 –