SQL查询-查找我的客户的时间间隔的SQL代码是什么';拜访
我是SQL新手,我的任务就是执行这个! 我想使用sql查询查找客户再次访问我的酒店之前的天数 这是我当前的数据表:SQL查询-查找我的客户的时间间隔的SQL代码是什么';拜访,sql,sql-server,Sql,Sql Server,我是SQL新手,我的任务就是执行这个! 我想使用sql查询查找客户再次访问我的酒店之前的天数 这是我当前的数据表: Passport No. Customer Name Check-in Date Check-out Date 123456 David 1/3/2011 5/3/2011 123456 David 8/3/2011 11/3/2011 654321 John 11/3/201
Passport No. Customer Name Check-in Date Check-out Date
123456 David 1/3/2011 5/3/2011
123456 David 8/3/2011 11/3/2011
654321 John 11/3/2011 18/3/2011
987654 Michael 11/3/2011 18/3/2011
654321 John 20/3/2011 24/3/2011
123456 David 7/7/2011 9/7/2011
987654 Michael 5/5/2011 8/5/2011
654321 John 20/4/2011 25/4/2011
123456 David 11/8/2011 18/8/2011
987654 Michael 1/6/2011 5/6/2011
567891 Mary 7/9/2011 3/10/2011
下面是一个示例,使用CTE中的
RANK
将上一条记录与下一条记录进行偏移,以便比较下一个签入日期与上一个签出日期:
WITH RankedVisits ([Rank], PassportNo, CustomerName, CheckInDate, CheckOutDate) AS
(
SELECT
RANK() OVER (ORDER BY PassportNo, CheckInDate) AS [Rank],
CustomerName,
PassportNo,
CheckInDate,
CheckOutDate,
FROM
Visits
)
SELECT
NextVisit.CustomerName,
DATEDIFF(D, PreviousVisit.CheckOutDate, NextVisit.CheckInDate) AS DaysBetween
FROM
RankedVisits AS PreviousVisit
JOIN RankedVisits AS NextVisit
ON PreviousVisit.[Rank] = NextVisit.[Rank] - 1 --Offset record with previous record
WHERE NextVisit.PassportNo = PreviousVisit.PassportNo
如果您使用的是SQL Server 2012,则有
LEAD
和LAG
函数可以使上述示例更清晰(更快)。那么您的问题是什么?您尝试过什么了吗?退房日期(第一条记录)和入住日期(下一条记录)之间的日期差异,对吗?您使用的RDM是什么?(mysql、mssql、oracle)?im使用MS SQL。是的,第一条记录和下一条记录之间的差异!