如何解决如何在Oracle DB中使用maxDate和Distinct我想在一天之内最后插入数据
我正在寻找一种获取数据的方法。 通过 当天的最新日期 通过UserId
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,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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。