Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL查询-查找我的客户的时间间隔的SQL代码是什么';拜访_Sql_Sql Server - Fatal编程技术网

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

我是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/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。是的,第一条记录和下一条记录之间的差异!