确定 SQL 中连续记录之间的时间间隔
本教程演示如何计算 SQL 表中给定帐号的连续行之间的日期差异。
方法一:子查询方法
此查询使用子查询计算日期差异:
<code class="language-sql">SELECT ID, AccountNumber, Date, NextDate, DATEDIFF(day, Date, NextDate) AS DateDifference FROM ( SELECT ID, AccountNumber, Date, ( SELECT MIN(Date) FROM YourTable T2 WHERE T2.AccountNumber = T1.AccountNumber AND T2.Date > T1.Date ) AS NextDate FROM YourTable T1 ) AS T</code>
说明:
外部查询选择 ID、AccountNumber、Date、计算出的 NextDate 以及日期差。 内部查询通过查找大于当前行日期且属于同一帐户的最小日期来标识每行的下一个日期 (NextDate
)。 DATEDIFF(day, Date, NextDate)
计算天数差异。
方法二:自连接技术
更有效的替代方案是利用自连接:
<code class="language-sql">SELECT T1.ID, T1.AccountNumber, T1.Date, MIN(T2.Date) AS NextDate, DATEDIFF(day, T1.Date, MIN(T2.Date)) AS DateDifference FROM YourTable T1 LEFT JOIN YourTable T2 ON T1.AccountNumber = T2.AccountNumber AND T2.Date > T1.Date GROUP BY T1.ID, T1.AccountNumber, T1.Date;</code>
此方法使用 LEFT JOIN
将每一行与具有相同帐号和较晚日期的后续行进行比较。 MIN(T2.Date)
查找下一个日期,DATEDIFF(day, ...)
计算天数差异。 没有后续行的行将具有 NULL
和 NextDate
的 DateDifference
值。 请注意,DATEDIFF
的第一个参数指定差异单位(此处为“天”)。 根据需要进行调整(例如“月”、“年”)。
以上是如何计算SQL中连续行之间的日期差异?的详细内容。更多信息请关注PHP中文网其他相关文章!