SQL:列中的聚合(group by like)

时间:2015-04-06 18:20:05

标签: sql group-by aggregate-functions

我按客户ID和日期选择过去两个月的客户群。我需要做的是在每个行中将该客户在两个月时间段的整个第一周所花费的总金额关联起来(当然,对于一个客户的每一行,这将是一个重复,但由于某种原因,这是可以的)。如果不使用子查询作为列,你知道怎么做吗? 我在考虑使用OVER PARTITION的一些组合,但无法弄清楚如何...... 非常感谢提前。 拉斐尔

查询:

select customer_id, date, sum(sales)
from transaction_table
group by customer_id, date

1 个答案:

答案 0 :(得分:1)

如果是特定的第一周(例如,您总是想要一年中的第一周,并且您的数据集通常包括1月和2月的消费),您可以使用sum(case ...):

select distinct customer_id, date, sum(sales) over (partition by customer_ID, date)
, sum(case when date between '1/1/15' and '1/7/15' then Sales end) 
    over (partition by customer_id) as FirstWeekSales
from transaction_table

回应以下评论;我不确定这是否是你正在寻找的,因为它涉及一个子查询,但这是我最好的镜头:

select distinct a.customer_id, date
, sum(sales) over (partition by a.customer_ID, date)
, sum(case when date between mindate and dateadd(DD, 7, mindate) 
    then Sales end) 
    over (partition by a.customer_id) as FirstWeekSales
from transaction_table a
left join 
(select customer_ID, min(date) as mindate 
    from transaction_table group by customer_ID) b
on a.customer_ID = b.customer_ID