0

値がグループ化に似ている場合、値を1行にグループ化したい。

グループ化する必要があるデータの例:

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

日付に対して集計を使用MINし、単純な. 列名を指定していないため、この例は必然的に一般的なものになります。MAXCONCAT

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 に答える