猿问

如何在 GROUP_CONCAT MySQL 选择中有条件分隔符

我不知道这是否可以做到。在我的 MySQL 代码中,我的选择之一是:

GROUP_CONCAT(timestamp SEPARATOR '~') AS times

我想做的是测试时间戳在日期/小时/分钟级别是否相等,以及是否用 a<br> 而不是波浪号替换 SEPARATOR。有没有办法在 MySQL 中做到这一点?如果不是,我将如何在 PHP 中进行操作?最终结果需要是两个(或更多)时间戳组成一个字符串,它将在表格单元格中使用。如果日期/小时/分钟相等,那么两者都将在同一个单元格中。如果它有助于时间戳几乎肯定会在表中是连续的。


汪汪一只猫
浏览 199回答 1
1回答

慕田峪4524236

您通常会使用两个级别的聚合来做到这一点。首先按分钟聚合并group_concat使用<br>分隔符,然后再次使用~分隔符聚合生成的字符串。假设一个名为mytable时间戳列的表称为mytimestamp,您将执行以下操作:select group_concat(gc0 order by myminute separator '~') gc1from (&nbsp; &nbsp; select&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; date_format(mytimestamp, '%Y-%m-%d %H:%i') myminute,&nbsp; &nbsp; &nbsp; &nbsp; group_concat(mytimestamp order by mytimestamp separator '<br>') gc0&nbsp; &nbsp; from mytable&nbsp; &nbsp; group by myminute) tDB Fiddle 上的演示:样本数据:| 我的时间戳 || :------------------ || 2019-01-01 00:00:00 || 2019-01-01 00:00:01 || 2019-01-01 00:00:10 || 2019-01-01 00:01:00 || 2019-01-02 14:10:00 || 2019-01-02 14:10:30 |查询结果:| gc1 || :------------------------------------------------------------------------------------------------------------------------------- || 2019-01-01 00:00:00<br>2019-01-01 00:00:01<br>2019-01-01 00:00:10~2019-01-01 00:01:00~2019- 01-02 14:10:00<br>2019-01-02 14:10:30 |
随时随地看视频慕课网APP
我要回答