sql - MySQL合并多行

标签 sql mysql aggregate-functions

我有一个类似于下面的表(当然有更多的行和字段):

category_id | client_id | date        | step
     1            1       2009-12-15    first_step
     1            1       2010-02-03    last_step

     1            2       2009-04-05    first_step
     1            2       2009-08-07    last_step
     
     2            3       2009-11-22    first_step
     
     3            4       2009-11-14    first_step
     3            4       2010-05-09    last_step

我想对此进行转换,以便我可以计算第一步和最后一步之间的时间,并最终找到第一步和最后一步之间的平均时间等。基本上,我对如何将上表转换为像这样的东西:

category_id | first_date | last_date
     1        2009-12-15   2010-02-03
     1        2009-04-05   2009-08-07
     2        2009-11-22   NULL
     3        2009-11-14   2010-05-09

如有任何帮助,我们将不胜感激。

最佳答案

根据问题更新/澄清更新:

  SELECT t.category_id,
         MIN(t.date) AS first_date,
         CASE 
           WHEN MAX(t.date) = MIN(t.date) THEN NULL 
           ELSE MAX(t.date)
         END AS last_date
    FROM TABLE t
GROUP BY t.category_id, t.client_id

关于sql - MySQL合并多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3345252/

相关文章:

MySQL按月和年过滤结果

sql - 删除重复项保持最小 ID

mysql - mysql 错误1064

java - 使用条件和/或投影(子查询)将 SQL 转换为 Hibernate 查询

java - 对父表和外键表进行批量操作使用MySQL还是Java更好

sql - 列 '*' 在选择列表中无效,因为它未包含在聚合函数或 GROUP BY 子句中

postgresql - 自定义聚合函数 parallel = safe 在 postgres 13.3 中生成语法

mysql - 获取两个事物同时出现的日期(mysql查询)

sql - 如何选择属性名称 (fn :local-name() with xquery

python - 按日期查询排序的唯一文本消息对象 Django ORM