我需要从SQL Server的一位客户的历史记录预订室获得2个日期之间的天数。数据具有3种状态-进入,停留和离开。
样本数据:
componentDidUpdate()
我希望该客户的结果是,房间A的天数为7天,房间B的天数为3天。
我已经尝试使用min和max,但是结果无效,因为在数据中,最终客户又回到了A房
对于查询,我使用
html
但是对于这个问题,我需要更改查询,但是我不知道如何获取房间A中状态“ IN”的第二个日期,也不能获取房间A中状态“ Out”的第二个日期
答案 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