如何在Oracle数据库中使用max(Date)和Distinct.我希望在一天内最后一次插入数据



我正在寻找一种获取数据的方法。通过最近日期在同一天按用户ID

UserId,Value1,Date
1, 2030,2020–09-07 10:58:58
1, 2020,2020–09-07 05:58:28
1, 2050,2020–09-08 19:58:28
2, 3000,2020–09-07 10:58:18
2, 2001,2020–09-06 10:58:55
3, 2400,2020–09-08 10:28:53
4, 2400,2020–09-07 13:28:53

例如

where Date >=  trunc(TO_DATE(’20200907’,’YYYYMMDD’))   and Date < trunc(TO_DATE(’20200908’,’YYYYMMDD’))  

理想结果

UserId,Value
1,2050 
2,3000
4,2400

选择UserId,值我应该用什么?

max(Date) ? Distinct userId ?  Group  by userId?

如果value是您想要的唯一列,那么您可以使用keep:

select userid, max(value1) keep(dense_rank last order by dt) value1
from mytable
where dt >= date '2020-09-07' and dt < date '2020-09-08'
group by userid
order by userid

注:

  • 这使用标准的date语法而不是to_date()来构建文字日期

  • date是Oracle中的保留字,因此不是列名的好选择;我在查询中将其重命名为dt

如果你想在结果集中有更多的列,那么用窗口函数过滤更合适:

select t.*
from (
select t.*, row_number() over(partition by userid order by dt desc) rn
from mytable t
where dt >= date '2020-09-07' and dt < date '2020-09-08'
) t
where rn = 1

相关内容

最新更新