2017-09-21 99 views
1
select 
logs.uid, 
logs.event_value 

from publicview.treasurehunters_ok logs 
left join public.app_ok_cbaiodclebabababa_agg_users users on logs.uid=users.uid 
where first_event_time>='01.09.2017 0:00:00' 
and first_event_time <= '11.09.2017 0:00:00' 
and logs.event ='balance_OK' 

我需要每一个UID按时间升序排列和logs.event_value按时间排序的SQL

只留下第一个值,即

uid logs.event_value 
1  10 
1  5 
1  3 

我们只需要 1 10即返回为每个用户留下第一行 。 所以有可能使?

+0

提示:'ROW_NUMBER()' –

+0

你可以写更多detaily,我很牛逼 –

+0

@a_horse_with_no_name,它,S MS SQL –

回答

1

你需要选择一个唯一的ID,最大日期的权利?您可以通过运行分区,这样的事情:

select * from (
select 
logs.uid, 
logs.event_value, 
ROW_NUMBER() OVER (PARTITION BY uid ORDER BY first_event_time DESC) r 

from publicview.treasurehunters_ok logs 
left join public.app_ok_cbaiodclebabababa_agg_users users on 
logs.uid=users.uid 
where first_event_time>='01.09.2017 0:00:00' 
and first_event_time <= '11.09.2017 0:00:00' 
and logs.event ='balance_OK') tab 
where r=1 
+0

Tnx,列引用“uid”不明确。有什么问题 –

+2

@ D.Joe:尝试'PARTITION BY logs.uid'或'PARTITION BY users.uid'。 – Berger

+0

对不起PARTITION BY logs.uid ORDER BY first_event_time DESC – MiloBellano