以下是问题陈述:
我有一个数据库表,其中的条目看起来像(这是虚构的表:-)):
Company Customer ID Date
Amazon 1 2012-08-30
Amazon 2 2012-09-30
Amazon 2 2012-09-1
amazon 2 2012-12-10
eBay 1 2012-03-10
eBay 10 2012-01-01
BananaR 1 2012-02-20
BananaR 1 2012-02-28
BananaR 1 2012-05-10
BananaR 1 2012-05-25
现在,此表中的每个条目都表示为在线交易完成的安全检查。所以第一行意味着“对于客户 ID 1,亚马逊在 2012 年 8 月 30 日为交易进行了在线安全检查”。
因此,我需要计算在第一次安全检查之后每个月对同一客户和公司组合进行多少次额外的安全检查。IE
对于客户 2,亚马逊在 2012 年 9 月 1 日进行了第一次检查,然后额外的检查将在 2012 年 9 月 30 日和 2012 年 12 月 10 日进行。所以预期的答案是:
Company CustomerID Month Additional checks
Amazon 1 2012-08 0
Amazon 2 2012-09 1
Amazon 2 2012-12 1
eBay 1 2012-03 0
eBay 10 2012-01 0
BananaR 1 2012-02 1
BananaR 1 2012-05 2
自每月进行第一次检查以来,我现有的查询输出用于额外检查,但我不知道我是否可以回溯到前几个月。所以我的查询看起来像:
select company as 'Company',
customer_id as 'Customer',
format_date as 'Month',
(add_count-1) as 'Additioanl Checks'
from (select count(*) as add_count,
company,
customer_id,
to_char(date, 'yyyy-mm') as format_date
from my_table
group by company, customer_id, format_date)
现在得到的结果是:
Company Customer Month Additional Checks
Amazon 1 2012-08 0
Amazon 2 2012-09 1
**Amazon 2 2012-12 0**
eBay 1 2012-03 0
eBay 10 2012-01 0
BananaR 1 2012-02 1
**BananaR 1 2012-05 1**
** 中的行不正确,因为它们计算的是每月的额外检查,而不是因为前几个月完成了第一次检查。