高效计算特定帐户的 SQL 中连续行之间的日期差异
本文演示了两个 SQL 查询来计算给定帐号的连续行之间的日期差异。 所提出的方法提供了不同程度的效率。
方法一:使用LEFT JOIN
和MIN()
此方法使用 LEFT JOIN
将同一帐户的每一行与后续行进行比较。 MIN()
函数查找下一个日期。
<code class="language-sql">SELECT T1.ID, T1.AccountNumber, T1.Date, MIN(T2.Date) AS Date2, DATEDIFF("D", T1.Date, MIN(T2.Date)) AS DaysDiff 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>
此查询将表 (YourTable
) 与其自身连接起来,将每一行 (T1
) 与同一帐号 (T2
) 的所有后续行进行比较。 MIN(T2.Date)
查找最早的后续日期,DATEDIFF
计算天数差异。 分组可确保每个原始行都有一个结果。
方法二:使用子查询提高效率
对于较大的数据集,子查询方法通常被证明更有效。该方法直接将日期计算合并到主查询中。
<code class="language-sql">SELECT ID, AccountNumber, Date, NextDate, DATEDIFF("D", Date, NextDate) AS DaysDiff 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>
这里嵌套了一个子查询来查找每行的 NextDate
。这避免了可能效率较低的 JOIN
操作。然后,外部查询使用 DaysDiff
.DATEDIFF
计算
两种方法都达到相同的结果:计算每个帐号的连续记录之间的日期差异。 但是,为了获得大型表的最佳性能,通常建议使用方法 2(使用子查询)。 选择最适合您的数据量和数据库系统的方法。
以上是如何在 SQL 中计算特定帐号的连续行之间的日期差异?的详细内容。更多信息请关注PHP中文网其他相关文章!