0

如果它们类似于对它们进行分组,我想将它们分组在一行中。

我必须分组的数据示例:

FG 555  | FRA  |    BRU | 07:00 | 07:50 | 26.Aug.2013
FG 555  | FRA  |    BRU | 07:00 | 07:50 | 2.Sep.2013  
FG 555  | FRA  |    BRU | 07:00 | 07:50 | 9.Sep.2013


BS 444  | MMF  |    TRN | 21:30 | 22:20 | 2.Oct.2013
BS 444  | MMF  |    TRN | 21:30 | 22:20 | 9.Oct.2013    
BS 444  | MMF  |    TRN | 21:30 | 22:20 | 16.Oct.2013   
BS 444  | MMF  |    TRN | 21:30 | 22:20 | 23.Oct.2013   

预期结果 :

FG 555  | FRA   | BRU   | 07:00 | 07:50 | 26/Aug/2013 – 09/Sep/2013
BS 444  | MMF   | TRN   | 21:30 | 22:20 | 02/Oct/2013 – 23/Oct/2013

这可以做到吗?请帮我 。

谢谢

4

2 回答 2

3

您可以使用MINMAX聚合日期,并使用简单的CONCAT. 您没有提供列名,所以这个例子必然是通用的:

SELECT
  Col1Code,
  Col2Code,
  Col3Code,
  StartTime,
  EndTime,
  CONCAT(MIN(DateValue), ' - ', MAX(DateValue))
FROM MyTable
GROUP BY
  Col1Code,
  Col2Code,
  Col3Code,
  StartTime,
  EndTime
于 2013-08-15T14:06:57.787 回答
0

我使用 php:

 $data = array(
    array("FG 555", "FRA", "BRU", "07:00", "07:50", "26.Aug.2013"),
    array("FG 555", "FRA", "BRU", "07:00", "07:50", "2.Sep.2013"),
    array("BS 444", "MMF", "TRN", "21:30", "22:20", "2.Oct.2013"),
    array("BS 444", "MMF", "TRN", "21:30", "22:20", "9.Oct.2013")
);

$_tmp = array();

foreach($data as $v){
    $_k = md5($v[0].$v[1].$v[2].$v[3].$v[4]);
    if(!isset($_tmp[$_k])){
        $_tmp[$_k] = $v;
        $_tmp[$_k]["min"] = $v[5];
        $_tmp[$_k]["max"] = $v[5];
        continue;
    }

    if(strtotime($v[5]) < strtotime($_tmp[$_k]["min"])) {
        $_tmp[$_k]["min"] = $v[5];
    }

    if(strtotime($v[5]) > strtotime($_tmp[$_k]["max"])) {
        $_tmp[$_k]["min"] = $v[5];
    }
}

var_dump($_tmp);

您需要 foreach $_tmp 再次格式化数据。

于 2013-08-15T14:33:07.387 回答