如果值相似,我想将它们分组在一行中。
我必须分组的数据示例:
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
这能做到吗?请帮帮我。
感谢
您可以对日期使用MIN
和MAX
聚合,并使用简单的CONCAT
格式化结果。您还没有提供列名,所以这个示例是通用的:
SELECT
Col1Code,
Col2Code,
Col3Code,
StartTime,
EndTime,
CONCAT(MIN(DateValue), ' - ', MAX(DateValue))
FROM MyTable
GROUP BY
Col1Code,
Col2Code,
Col3Code,
StartTime,
EndTime
我使用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来格式化数据。