子查询计算日期之间的天数

Posted

技术标签:

【中文标题】子查询计算日期之间的天数【英文标题】:subquery calculate days between dates 【发布时间】:2020-10-07 16:35:15 【问题描述】:

子查询、SQL、Oracle

我是子查询的新手,希望能得到一些帮助。我的想法是先运行子查询,然后根据 trans_code = 'ABC' 的子查询过滤器执行外部查询。该查询有效,但它从所有交易代码中提取所有日期,trans_code 'ABC' 和 'DEF' 等。

最终目标是计算日期之间的天数。

表结构为:

acct_num    effective_date
1234        01/01/2020
1234        02/01/2020
1234        03/01/2020
1234        04/01/2021

我想执行如下查询:

account     Effective_Date  Effective_Date_2   Days_Diff
1234        01/01/2020      02/01/2020         31  
1234        02/01/2020      03/01/2020         29
1234        03/01/2020      04/01/2021         395
1234        04/01/2021                         0

查询:

SELECT t3.acct_num,
       t3.trans_code,
       t3.effective_date,
       MIN (t2.effective_date) AS effective_date2,
       MIN (t2.effective_date) - t3.effective_date AS days_diff
FROM (SELECT t1.acct_num, t1.trans_code, t1.effective_date
      FROM lawd.trans t1
      WHERE t1.trans_code = 'ABC') t3
     LEFT JOIN lawd.trans t2 ON t3.acct_num = t2.acct_num
WHERE t3.acct_num = '1234' AND t2.effective_date > t3.effective_date
GROUP BY t3.acct_num, t3.effective_date, t3.trans_code
ORDER BY t3.effective_date asc

TIA!

【问题讨论】:

【参考方案1】:

使用lead():

select t.*,
       lead(effective_date) over (partition by acct_num order by effect_date) as next_efffective_date,
       (lead(effective_date) - effective_date) as diff
from lawd.trans t

【讨论】:

这行得通。 :) 领先(有效日期)超过(按 acct_num 顺序按有效日期划分)-有效日期为差异 试图在下面使用有子句,但它给了我一个错误'windows function are not allowed here'有什么提示吗?领先(有效日期)超过(按 acct_num 分区顺序按有效日期)-有效日期>'365' @BiNguyen 。 . .如果要过滤结果,则需要使用子查询。 wherehaving 子句中不允许使用窗口函数。

以上是关于子查询计算日期之间的天数的主要内容,如果未能解决你的问题,请参考以下文章

查询两个日期相差的月数和剩下的天数

db2 计算间隔天数

js怎么输出当前日期和指定日期的相隔天数?谢谢

计算两个日期之间不包括星期日的天数

c#如何计算两个日期之间相隔天数

C++ 计算两个日期之间的天数