选择第一个有效值并将其作为新列附加到GroupBy

时间:2018-03-27 14:19:03

标签: mysql sql

我有很多行具有相同的数据但是一列或两列不同。

我想通过在常用数据上将它们合并在一起来减少行数,然后将不同的数据拉入新列。此外,一些行将缺少公共数据,但只要其中一行具有Order_ID(和Type)的值,就可以获取该值。

下面可以看得更清楚

原始数据(工作):

Order_ID Type CreatedTime
5 Collect 1000000000
5 Deliver 
5 Deliver 1100000000
8 Collect 2000000000
8 Collect 2000000000
8 Deliver 2300000000

所需:

Order_ID CollectCreatedTime DeliverCreatedTime
5 1000000000 1100000000
8 2000000000 2300000000

我拥有的是:

SELECT Order_ID, SOMETHING() As CollectCreatedTime, SOMETHING() As DeliverCreatedTime
FROM `Jobs` GROUP BY `Order_ID`

但是,我无法弄清楚如何“选择存在的第一个值(如果没有值,则选择不存在),并将其附加到GROUP BY选择。”

请告知我是否需要提出问题以便更好地解释。

1 个答案:

答案 0 :(得分:2)

似乎你想要条件聚合

SELECT Order_ID,
   min(case when Type = 'Collect' then CreatedTime end) as CollectCreatedTime,
   min(case when Type = 'Deliver' then CreatedTime end) as DeliverCreatedTime 
FROM `Jobs`
GROUP BY `Order_ID`