2014-02-17 43 views
-1

MYSQL透視表菜鳥需要幫助的

COUNTY OUTAGE TIME 
BOONE 1 2/17/2014 16:03 
BOONE 1 2/17/2014 15:36 
BOONE 1 2/17/2014 15:18 
BOONE 1 2/17/2014 14:14 
BOONE 1 2/17/2014 14:13 
BROWN 1 2/17/2014 16:03 
BROWN 1 2/17/2014 15:36 
BROWN 1 2/17/2014 15:18 
BROWN 0 2/17/2014 14:14 
BROWN 0 2/17/2014 14:13 
BUTLER 2 2/17/2014 16:03 
BUTLER 2 2/17/2014 15:36 
BUTLER 2 2/17/2014 15:18 
BUTLER 3 2/17/2014 14:14 
BUTLER 3 2/17/2014 14:13 
CAMPBELL 0 2/17/2014 16:03 
CAMPBELL 0 2/17/2014 15:36 
CAMPBELL 0 2/17/2014 15:18 
CAMPBELL 0 2/17/2014 14:14 
CAMPBELL 0 2/17/2014 14:13 
CLERMONT 1 2/17/2014 16:03 
CLERMONT 1 2/17/2014 15:36 
CLERMONT 1 2/17/2014 15:18 
CLERMONT 0 2/17/2014 14:14 
CLERMONT 0 2/17/2014 14:13 

我怎樣才能得到我的數據看起來更像

COUNTY TIME_1 TIME_2 TIME_3 TIME_4 TIME_5 
BOONE 1 1 1 1 1 
BROWN 0 1 1 1 0 
BUTLER 2 2 2 3 3 

總是會有每個縣五個不同的重複次數。我在這裏感到茫然。

+0

我的意思是數據就在我面前,它使我瘋了。 – chazlander

+0

因爲你的表格結構不好,你沒有創建一個名爲id的列,這將是自動增量。或者你沒有創建存儲數字1,2,3,4,5的列。或者有很多選擇。你只是存儲,然後試圖打破你的頭如何管理它們。 –

回答

0

假設您想按最近發生的次序排序;你需要自連接,並使用LIMIT操作者選擇您想要的日期:

select 
    c.county, 
    t1.outage as outage_1, t1.time as time_1, 
    t2.outage as outage_2, t2.time as time_2, 
    t4.outage as outage_3, t3.time as time_3, 
    t4.outage as outage_4, t4.time as time_4, 
    t5.outage as outage_5, t5.time as time_5 
from counties c 
join (
    select * 
    from counties 
    order by time desc 
    limit 0,1 
) t1 on t1.county = c.county 
join (
    select * 
    from counties 
    order by time desc 
    limit 1,1 
) t2 on t1.county = c.county 
join (
    select * 
    from counties 
    order by time desc 
    limit 2,1 
) t3 on t1.county = c.county 
join (
    select * 
    from counties 
    order by time desc 
    limit 3,1 
) t4 on t1.county = c.county 
join (
    select * 
    from counties 
    order by time desc 
    limit 4,1 
) t5 on t1.county = c.county 

警告:與很多支點,這不會是高性能的。不要將此用於實時查詢,僅用於編譯報告數據。

2

你試過

SELECT COUNTY, 
     GROUP_CONCAT(OUTAGE ORDER BY `TIME` DESC SEPARATOR ' ') AS outstr 
    FROM tbl 
    GROUP BY COUNTY 

這裏有一個小提琴。 http://sqlfiddle.com/#!2/3a13c/1/0這會給你你的五個整數值連接成一個字段。它會根據最新的時間欄順序排列它們。這不完全是你指定的,但它可以爲你做這項工作。

如果您需要五列,可以像這樣結束查詢。

SELECT COUNTY, 
     SUBSTR(outstr, 1, 1) as TIME_1, 
     SUBSTR(outstr, 3, 1) as TIME_2, 
     SUBSTR(outstr, 5, 1) as TIME_3, 
     SUBSTR(outstr, 7, 1) as TIME_4, 
     SUBSTR(outstr, 9, 1) as TIME_5 
    FROM (
     SELECT COUNTY, 
       GROUP_CONCAT(OUTAGE ORDER BY `TIME` DESC SEPARATOR ' ') AS outstr 
      FROM tbl 
      GROUP BY COUNTY 
     ) AS a 

這是一個小提琴。 http://sqlfiddle.com/#!2/3a13c/5/0這有點噁心。但傳統的樞軸技術是困難的行中缺乏明確的標籤,你想要轉到列.int

+0

不漂亮,但比我更漂亮:) –