【发布时间】:2018-07-09 17:43:27
【问题描述】:
所以我有这个查询,它可以让我计算在给定时间范围内每个月至少进行一次某种交易的帐户。在这种情况下,我正在检查 3 个月内的交易。请参阅下面的查询:
select
Yr
, count(distinct acct_nbr) as AcctCt
from (
select
Yr
, acct_nbr
, count(distinct Mth) as Mths
from (
select
extract(year from tran_dt) as Yr
, acct_nbr
, extract(month from tran_dt) as Mth
, tran_id
from br.bdft
where prod_type = 44
and (tran_dt between '2017-10-01' and '2017-12-31'
or tran_dt between '2016-10-01' and '2016-12-31'
or tran_dt between '2015-10-01' and '2015-12-31'
or tran_dt between '2014-10-01' and '2014-12-31'
or tran_dt between '2013-10-01' and '2013-12-31')
and tran_cd = 'DD'
) dt
group by 1,2
) dt2
where Mths = 3
group by 1
我得到的结果如下:
Yr: AcctCt:
2017 258527
2016 231304
2015 188550
2014 210339
2013 170781
我目前通过从交易日期中提取 YEAR 来按 YEAR 对结果进行分组。当日期范围不跨越年份时(例如我在上面的查询中使用的),这可以正常工作。但是一旦我跨年,例如2017-11-01 到 2018-01-31,这种方法不再有效。
有没有更好的方法来对结果进行分组,无论我使用的日期范围如何,它始终有效?
【问题讨论】:
-
那些日期范围总是硬编码/提前知道的?
-
它将每月运行一次。理想情况下,我想自动化它,这样我就不必每个月手动更新日期范围,但我是一个 SQL 新手,还不知道该怎么做(如果可能的话)。
-
您确定三个月范围的规则是什么?前 4 个月加上当前年份的当前加上前两个月份?
-
是的,当月 + 前 2 个月,以及当年 + 前 4 年。