0

以下の表1に示すサンプルデータを含むデータベースがあります。表2または表3の形式で表示するSQLクエリを作成するにはどうすればよいですか?

表1表2                      
日付| バリューイヤー| 週| 合計値| % 変化する               
------------ + ------- ------ + ----- +-| -------------- -| ----------
2011年12月19日| 60 2012 | 1 | 295 | 656.41%               
2011年12月20日| 49 2012 | 0 | 39 | -80.98%               
2011年12月21日| 42 2012 | 52 | 205 | -41.76%               
2011年12月22日| 57 2011 | 51 | 352 |                 
2011年12月23日| 88
2011年12月24日| 18表3                    
2011年12月25日| 38年| 週| SUM1 | 年| 週| SUM2 | % 変化する
2011年12月26日| 16 ------ + -------- + -------- + -------- + -------- + ------ -+ -----------
2011年12月27日| 66 2012 | 1 | 295 | 2012年| 0 | 39 | 656.41%
2011年12月28日| 2012年21月| 0 | 39 | 2011 | 52 | 205 | -80.98%
2011年12月29日| 79 2011 | 52 | 205 | 2011 | 51 | 352 | -41.76%              
2011年12月30日| 2011年7月| 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を年/週レベルに集約してから、環境に応じて別の言語で「%change」を実行することです。ただし、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 に答える