繁体   English   中英

MySQL合并多行

[英]MySQL Combine multiple rows

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

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

任何帮助,将不胜感激。

在OMG Ponies的帮助下,以下是解决方案:

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

根据问题更新/说明进行了更新:

  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

一个简单的GROUP BY应该可以解决问题

SELECT   category_id
         , MIN(first_date)
         , MAX(last_date)
    FROM TABLE
GROUP BY category_ID

尝试:

select
    category_id
    , min(date) as first_date
    , max(date) as last_date
from
    table_name
group by
    category_id
    , client_id

简单的答案:

  SELECT fist.category_id, first.date, last.date
    FROM tableName first
    LEFT JOIN tableName last
        ON first.category_id = last.category_id
        AND first.step = 'first_step'
        AND last.step ='last_step'

您也可以在查询中进行计算,而不仅仅是返回两个日期值。

您需要执行两个子查询,然后将它们连接在一起-类似于以下内容

从(a.category_id = b.category_id)上的一个左联接(从step =“ first_step”的表中,选择*日期作为from last_date的表)中的select * from

请享用!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM