我有以下的输出: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