2014-02-17 45 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

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