java中怎么选择日期,在范围列表中选择日期

本文介绍如何利用SQL的ROW_NUMBER函数结合PARTITION BY子句,从具有日期的数据表中检索每个时间范围内的最小日期。通过内联查询和左连接,实现了在保留所有范围的同时,展示匹配范围的日期或显示NULL。这种方法对于处理时间跨度的数据非常有用。
摘要由CSDN通过智能技术生成

您可以使用此查询使用 ROW_NUMBER() 来获得最小值 . ranges 是您的CTE的结果, table1 是您有日期的另一个表 .

select x.somedate

from

(select t.somedate,

ROW_NUMBER() OVER (PARTITION BY r.first_day_of_month, r.last_day_of_moth ORDER BY t.somedate) rownumber

from ranges r

inner join table1 t

on r.first_day_of_month <= t.somedate and r.last_day_of_moth >= t.somedate) x

where x.rownumber = 1

如果要获取所有范围并仅包含匹配范围的天数并为其他天数显示null,则可以再次加入 ranges :

select ranges.first_day_of_month, ranges.last_day_of_moth, x.somedate

from

ranges

left join

(select t.somedate, r.first_day_of_month, r.last_day_of_moth,

ROW_NUMBER() OVER (PARTITION BY r.first_day_of_month, r.last_day_of_moth ORDER BY t.somedate) rownumber

from ranges r

inner join table1 t

on r.first_day_of_month <= t.somedate and r.last_day_of_moth >= t.somedate) x

on x.first_day_of_month = ranges.first_day_of_month and x.last_day_of_moth = ranges.last_day_of_moth

where isnull(x.rownumber, 1) = 1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值