您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

丢弃结果中包含的现有日期,SQL Server

丢弃结果中包含的现有日期,SQL Server

在使用sql Server 2012或更高版本的系统中,您可以LAG()用来获取一个最终日期并调整初始日期:

with ReservationAdjusted as (
select *,
  lag(LastDay) over(partition by HouseID order by InitialDay, LastDay) as PrevIoUsLast
from Reservation
)
select HouseId,
  sum(case when PrevIoUsLast>LastDay then 0 -- fully contained in the prevIoUs reservation
    when PrevIoUsLast>=InitialDay then datediff(day,PrevIoUsLast,LastDay) -- overlap
    else datediff(day,InitialDay,LastDay)+1 -- no overlap
    end) as Days
from ReservationAdjusted
group by HouseId

情况是:

请注意,我们不需要额外的条件来保留a,HouseID因为认情况下该LAG()函数NULL在没有上一行时返回,并且与null的比较始终为false。

样本输入和输出

| HouseId | InitialDay |    LastDay |
|---------|------------|------------|
|       1 | 2017-09-18 | 2017-09-20 |
|       1 | 2017-09-18 | 2017-09-22 |
|       1 | 2017-09-21 | 2017-09-22 |
|      19 | 2017-09-18 | 2017-09-27 |
|      19 | 2017-09-24 | 2017-09-26 |
|      19 | 2017-09-29 | 2017-09-30 |
|      20 | 2017-09-19 | 2017-09-22 |
|      20 | 2017-09-22 | 2017-09-26 |
|      20 | 2017-09-24 | 2017-09-27 |

| HouseId | Days |
|---------|------|
|       1 |    5 |
|      19 |   12 |
|      20 |    9 |
SQLServer 2022/1/1 18:53:30 有517人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶