[英]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.