Ant*_*nio 2 sql-server select sql-server-2012
我有一张包含付款信息的表格,如下所示:
ID COSTUMER_ID DATEPAID AMOUNT
1 1 2012-01-01 50
2 1 2012-02-01 100
3 1 2012-03-01 70
4 2 2012-03-01 6000
4 2 2012-09-01 3000
4 2 2014-04-01 8000
5 3 2013-03-01 9000
6 3 2013-08-01 3000
Run Code Online (Sandbox Code Playgroud)
等等。我需要知道哪些客户在 12 个月内支付了超过 10,000 美元。(在示例中,只有客户 3 适合)。不要介意什么时候,唯一的标准是在任何连续 12 个月的组合中 SUM(AMOUNT) > 10000。
但我坚持下去。有任何想法吗?我正在使用 SQL Server 2012。
一种方法是选择返回表并对行之前的行求和,然后将其用作内部查询,以便能够在 where 子句中使用总和,如下所示:
select *
from (
select
P1.ID,
P1.CUSTOMER_ID,
P1.DATEPAID,
(select sum(P2.AMOUNT)
from PAYMENT P2
where P1.CUSTOMER_ID = P2.CUSTOMER_ID and
P2.DATEPAID <= P1.DATEPAID and
P2.DATEPAID >= dateadd(month, -12, P1.DATEPAID)) as PAID12M
from
PAYMENT P1
) X
where PAID12M > 10000
Run Code Online (Sandbox Code Playgroud)
这将返回条件匹配的所有行,如果您只需要 customer_id 或第一行或类似的东西,则必须使外部查询更复杂一些。
归档时间: |
|
查看次数: |
312 次 |
最近记录: |