根据不同行中的值从同一列中选择值(如INDEX / MATCH?)

时间:2016-06-16 19:01:43

标签: mysql sql

我有下表:

ID          Status  Datestamp

241112069   Stop    6/15/2016 16:46
241112069   Start   6/15/2016 16:28
241108880   Stop    6/15/2016 15:42
241105741   Finish  6/15/2016 17:58
241105741   Start   6/15/2016 15:24
241105741   Stop    6/15/2016 15:24
241105111   Stop    6/15/2016 15:31
241105111   Stop    6/15/2016 15:31
241105111   Start   6/15/2016 15:31
241105110   Stop    6/15/2016 15:31
241105110   Start   6/15/2016 15:31
241105110   Stop    6/15/2016 15:31
241105109   Stop    6/15/2016 15:31
241105109   Stop    6/15/2016 15:31
241103498   Stop    6/15/2016 15:12
241103498   Start   6/15/2016 15:12
241102948   Stop    6/15/2016 15:10
241102380   Stop    6/15/2016 15:07
241101836   Stop    6/15/2016 15:03
241101836   Start   6/15/2016 15:03
241101835   Stop    6/15/2016 15:03
241101835   Start   6/15/2016 15:03
241101537   Finish  6/15/2016 17:55
241101537   Stop    6/15/2016 15:02
241101537   Start   6/15/2016 15:02
241097936   Stop    6/15/2016 14:54
241097936   Finish  6/15/2016 15:16
241097936   Start   6/15/2016 14:44

我尝试编写一个基本上返回不同ID的select查询,然后是三个包含每个状态(start,stop,finish)日期戳的新列。把我的头围绕着箱子,子查询等,但没有得到我想要的结果。我会在Excel中使用INDEX / MATCH,但这个数据库是巨大的。

警告:

  1. 对于相同的状态/订单或空白值,可以有多个状态条目。对于多个条目,我只想要第一个。
  2. 感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

可能是一些内部联接

select a.id, min(a.datestamp) as start, min(b.datestamp) as stop, min( c.datestamp ) as finish
from my_table as a
inner join my_table as b on a.id = b.id and b.status = 'stop'
inner join my_table as c on a.id = c.id and c.status = 'Finish'
where  a.status = 'Start';
group by a.id
相关问题