【问题标题】:Sort by time in SQLSQL中按时间排序
【发布时间】:2018-03-02 22:26:14
【问题描述】:
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 的第一个值

uid  logs.event_value
1      10
1      5
1      3

我们只需要返回 1 10 即留下第一行 对于每个用户。 那么有可能制作吗?

【问题讨论】:

标签: sql sql-server


【解决方案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

【讨论】:

  • Tnx,列引用“uid”不明确。怎么了
  • @D.Joe:试试PARTITION BY logs.uidPARTITION BY users.uid
  • 是的,对不起 PARTITION BY logs.uid ORDER BY first_event_time DESC
  • 原因是jon中不止一张表有uid,你必须指定使用哪一张。所以 logs.uid 是表日志中的一个。希望解释有帮助
  • 所以改为订购 asc(第一次注册日期)。 (PARTITION BY uid ORDER BY first_event_time ASC)
猜你喜欢
  • 2012-10-18
  • 2012-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-16
  • 1970-01-01
相关资源
最近更新 更多