如何根据日期范围对查询结果进行分类

时间:2015-03-15 06:23:24

标签: sql oracle

我有一个查询

Select PRODUCT_NAME, MIN(DATE_A), MAX(DATE_A), SUM(UNITS) FROM TABLES GROUP BY PRODUCT_NAME

结果

PENCILS      1/1/2015        3/15/2015          454
PENS         2/1/2015        3/15/2015          754

我想将查询分类为铅笔的结果

0-30 days total units  - 201
31-60 days total units - 202
61-90 days total units - 51

结果可能采用以下格式

PRODUCT     DATE_FROM      DATE_TO      30 days   60 days   90 days
PENCILS     1/1/2015      3/15/2015     201         202       51
PENS        2/1/2015      3/15/2015     401         352       0

1 个答案:

答案 0 :(得分:1)

查询:

with dates as (
  select product_name, min(date_a) date_from, max(date_a) date_to 
    from tables group by product_name)
select product_name, date_from, date_to,
    sum(case when date_from +  0 <= date_a and date_a < date_from + 30 
      then units else 0 end) d30,
    sum(case when date_from + 30 <= date_a and date_a < date_from + 60 
      then units else 0 end) d60,
    sum(case when date_from + 60 <= date_a and date_a < date_from + 90 
      then units else 0 end) d90
  from tables t join dates d using (product_name)
  group by product_name, date_from, date_to order by product_name

如果您想要更多时段,请添加下一栏。

SQL Fiddle