我有以下的輸出:SQL GROUP BY和滯後功能沒有給予正確的輸出
last_login | id | type | w_id
11/9/2016 10:59:13 PM | 123 | Thing1 | W1
11/9/2016 10:59:15 PM | 123 | Thing1 | W1
11/9/2016 10:59:15 PM | 123 | Thing1 | W3
11/10/2016 10:59:13 PM | 123 | Thing2 | W2
11/11/2016 10:59:13 PM | 123 | Thing1 | W1
11/12/2016 10:59:13 PM | 123 | Thing1 | W1
11/12/2016 10:59:13 PM | 345 | Thing1 | W4
11/13/2016 10:59:13 PM | 345 | Thing1 | W1
11/14/2016 10:59:13 PM | 345 | Thing2 | W2
11/15/2016 10:59:13 PM | 345 | Thing2 | W5
11/16/2016 10:59:13 PM | 345 | Thing1 | W1
11/16/2016 10:59:13 PM | 345 | Thing1 | W1
11/17/2016 10:59:13 PM | 345 | Thing1 | W4
11/17/2016 10:59:13 PM | 345 | Thing1 | W4
爲以下查詢:
select sa.last_login, ad.ID, sa.type, w_id,
from table1 dcc
join table2 AD
on AD.ID=DCC.id
JOIN table3 sa
ON AD.ID=sa.id
join table4 sc
on dcc.id=sc.id
where sic3=‘Something’
order by dcc.id, sa.last_login
我想大概是這樣的輸出:
last_login | id | old_type | type | old_w_id | w_id
11/11/2016 10:59:13 PM | 123 | Thing2 | Thing1 | W2 | W1
11/17/2016 10:59:13 PM | 345 | Thing1 | Thing1 | W1 | W4
我正在嘗試以下列方式執行此操作:
select
t.last_login, t.id, t.old_type, t.type , t.old_w_id, t.w_id
from
(select sa.last_login, ad.id, sa.type,
lag(sa.type, 1) over (partition by ad.id order by sa.last_login) as old_type, w_id,
lag(w_id, 1) over (partition by ad.ID order by sa.last_login) as old_w_id from table1 dcc
join table2 AD
on ad.id=DCC.id
JOIN table3 sa
ON AD.ID=sa.id
join table4 sc
on dcc.id=sc.id
where sc.si=’Something’
order by dcc.id, sa.last_login) t
where t.old_type like ’THING1’ and t.type like ‘THING2’
group by t.id, t.id, t.old_type, t.type, t.w_id, t.old_w_id
但我發現了的像這樣的輸出:
last_login | id | old_type | type | old_w_id | w_id
11/11/2016 10:59:13 PM | 123 | Thing1 | Thing2 | W1 | W2
如何獲得所需的輸出,爲什麼我的查詢(滯後功能)不能正常工作?
什麼'by'有這個查詢做組? –
這是一個巨大的表,每個ID有多個條目。 – akrama81
@GordonLinoff在我的問題中編輯表格輸出和需要的輸出以獲得更好的想法 – akrama81