0

我有一个数据库,其中包含下表 1 表示的示例数据。如何编写 SQL 查询以表 2 或表 3 格式显示它们?

表 1 表 2                      
日期 | 价值年份 | 周 | 总值 | % 改变               
------------+------- ------+-----+--|-------------- -|----------
2011 年 12 月 19 日 | 60 2012 | 1 | 295 | 656.41%               
2011 年 12 月 20 日 | 49 2012 | 0 | 39 | -80.98%               
21/12/2011 | 42 2012 | 52 | 205 | -41.76%               
22/12/2011 | 57 2011 | 51 | 352 |                 
2011 年 12 月 23 日 | 88
2011 年 12 月 24 日 | 18 表 3                    
25/12/2011 | 38 年 | 周 | 总和1 | 年份 | 周 | 总和2 | % 改变
2011 年 12 月 26 日 | 16 ------+--------+--------+--------+--------+------ --+-----------
27/12/2011 | 66 2012 | 1 | 295 | 2012 | 0 | 39 | 656.41%
2011 年 12 月 28 日 | 21 2012 | 0 | 39 | 2011 | 52 | 205 | -80.98%
29/12/2011 | 79 2011 | 52 | 205 | 2011 | 51 | 352 | -41.76%              
2011 年 12 月 30 日 | 7 2011 | 51 | 352 |    
2011 年 12 月 31 日 | 16
2012 年 1 月 1 日 | 39
2012 年 2 月 1 日 | 17
2012 年 3 月 1 日 | 86
2012 年 4 月 1 日 | 55
2012 年 5 月 1 日 | 82
2012 年 6 月 1 日 | 0
2012 年 7 月 1 日 | 9
2012 年 8 月 1 日 | 46
4

1 回答 1

1

我的偏好是运行 1 个查询以将表 1 聚合到年/周级别,然后根据您的环境用另一种语言执行“% 更改”。然而,如果你真的需要一个纯 SQL 的解决方案,你可以做这样的事情。

create table t1 as
    select year(Date) as year, week(Date) as week, sum(Value) as totalvalue
    from table1
    group by year(Date) as year, week(Date) as week
    order by Date desc
;

select a.year, a.month, a.totalvalue,
(a.totalvalue-b.totalvalue)/b.totalvalue as pct_change
from (
  select year, month, totalvalue, 
  case when week>1 then week-1 else 52 end as prevweek,
  case when week>1 then year else year-1 end as prevyear
  from t1
  ) a
    left outer join t1 b
    on a.prevweek=b.week and a.prevyear =b.year
;
于 2012-04-19T03:43:40.793 回答