2016-09-15 5 views
0

내가이 테이블 변환하려고 내 열을 타격했습니다 :이 속으로MySQL의 피벗 테이블 날짜

Date   Table  Size in MB 
------------ ----------- ----------- 
2016-09-14 table1  1.02 
2016-09-15 table1  6.03   
2016-09-14 table2  120.0  
2016-09-15 table2  150.0  
2016-09-14 table3  50.0   
2016-09-15 table3  52.0   

을 :

Table  2016-09-14 2016-09-15 DIFF 
----------- ----------- ----------- ------- 
table1  1.02   6.03   5.01 
table2  120.0  150.0   30.0 
table3  50.0   52.0   2.0 

피벗 테이블이 원래의 테이블을 형성하지만 퍼팅 date 필드를 mb 열의 크기에 대한 열 이름에 입력하고 가능한 경우 마지막 열의 값을 비교합니다.

지금까지 나는 걸음 더 가까이 피벗

select `Table`, 
    max(case when rownum = 1 then date end) Date1, 
    max(case when rownum = 2 then date end) Date2 
from 
(
    select table_name AS `Table`, 
    date,round(((data_length + index_length)/1024/1024), 2) `Size in MB`, 
    @row:=if(@prev=table_name, @row,0) + 1 as rownum, 
    @prev:=table_name 
    FROM DBA_DB.table_growth_history, (SELECT @row:=0, @prev:=null) r 
    order by table_name, date 
) s 
group by table_name 
order by table_name, date 

내가 원하는하지 무엇을 표하지만 어쩌면에 대한 이전의 게시물에서 코드를 사용하여이

Table  Date1  Date2  
----------- ----------- ----------- 
table1  2016-09-14 2016-09-15 
table2  2016-09-14 2016-09-15 
table3  2016-09-14 2016-09-15 

을 할 수 있습니다. 전문가의 도움이 필요합니다. 나는 어떤 조언을 주셔서 감사합니다. 감사합니다

답변

0

조건부 집계 다만 수

select table_name, 
     max(case when date = '2016-09-14' then round(((data_length + index_length)/1024/1024), 2) end) as size_20160915, 
     max(case when date = '2016-09-15' then round(((data_length + index_length)/1024/1024), 2) end) as size_20160916, 
     (max(case when date = '2016-09-15' then round(((data_length + index_length)/1024/1024), 2) end) - 
     max(case when date = '2016-09-14' then round(((data_length + index_length)/1024/1024), 2) end) 
     ) as diff 
from DBA_DB.table_growth_history t 
where date in ('2016-09-14', '2016-09-15') 
group by table_name; 
+0

나는 그와 함께 가야합니다. 그것은 현재 유일한 해결책으로 보인다. 고맙습니다 @ 고든 – Haohmaru