如何获取SQL Server中两个日期之间的天数?

时间:2019-03-27 09:04:03

标签: sql sql-server

我需要从SQL Server的一位客户的历史记录预订室获得2个日期之间的天数。数据具有3种状态-进入,停留和离开。

样本数据:

componentDidUpdate()

我希望该客户的结果是,房间A的天数为7天,房间B的天数为3天。

我已经尝试使用min和max,但是结果无效,因为在数据中,最终客户又回到了A房

对于查询,我使用

html

但是对于这个问题,我需要更改查询,但是我不知道如何获取房间A中状态“ IN”的第二个日期,也不能获取房间A中状态“ Out”的第二个日期

2 个答案:

答案 0 :(得分:0)

status的值似乎无关紧要,并且由于您每天有一个房间被占用,因此每个房间只需简单地计数一个不同的date值即可。我采用了与众不同的方法,这样一来,即使在退房的同一天办理入住手续,也不会被计算两次(以防万一)。

结果查询:

SELECT room, COUNT(distinct date) as DaysOccupied
FROM theTable
GROUP BY room

答案 1 :(得分:0)

使用分组依据,汇总最小值和最大值以及datediff函数

样本表和数据

declare @roombookingdata table
(id int ,room varchar(1), status varchar(10), recorddate date)

insert into @roombookingdata
(id , room  , status ,   recorddate)
values
(1  ,   'A'   ,   'In'   , '2018-01-10'),
(2  ,   'A'   ,   'Stay ', '2018-01-11'),
(3  ,   'A'   ,   'out'  , '2018-01-12'),
(4  ,   'B'   ,   'In'   , '2018-01-12'),
(5  ,   'B'   ,   'Stay' , '2018-01-13'),
(6  ,   'B'   ,   'Out'  , '2018-01-14'),
(7  ,   'A'   ,   'In'   , '2018-01-14'),
(8  ,   'A'   ,   'Stay' , '2018-01-15'),
(9  ,   'A'   ,   'Stay' , '2018-01-16'),
(10 ,   'A'   ,   'Out'  , '2018-01-17')

查询

select room, DateDiff(d, min(recorddate) , max(recorddate) ) as NooFDays, min(recorddate) as mindate, max(recorddate) as maxDate
from @roombookingdata
group by room