有一张桌子:
event |id |timestamp --------------------- event1|001|21-03-15 event2|001|22-03-15 event1|002|23-03-15 event2|002|24-03-15
显示结果的请求应该是什么:
id |event1 |event2 | ---------------------- 001|21-03-15|22-03-15| 002|23-03-15|24-03-15|
我认为您首先需要选择独特的id
:
SELECT id FROM test GROUP BY id;
然后是这样的事情:
SELECT timestamp
FROM ...
WHERE id IN (SELECT id FROM test GROUP BY id) AND event='event1';
预先知道事件('event1', 'event2')
。
如果在一个ID下有重复事件,具有不同或相同的时间戳,请在结果中添加列,例如:
id |event1 |event2 |event1 |event2 | ---------------------------------------- 001|21-03-15|22-03-15|23-03-15|23-03-15| 002|23-03-15|24-03-15|NULL |NULL |
答案 0 :(得分:1)
您正在寻找一个简单的“枢轴”或“交叉”技巧:
SELECT id
, min(CASE event WHEN 'event1' THEN timestamp END) AS event1
, min(CASE event WHEN 'event2' THEN timestamp END) AS event2
FROM test
GROUP BY id
ORDER BY id;
答案 1 :(得分:1)
我找到了一个解决方案,查询看起来像这样:
C =
'BACDF'
'BAF'
'BACDEFG'
'ABCDEF'
'ABDEFG'
'ABCDEFG'
'ABCEG'
答案 2 :(得分:0)
您可以将event1
的记录加入包含event2
SELECT t1.id as id, t1.timestamp as event1, t2.timestamp as event2
FROM test t1 LEFT JOIN test t2
ON t1.id = t2.id AND t1.event = 'event1' and t2.event = 'event2'
该查询假定您始终拥有event1
,因此使用了LEFT JOIN。
如果您需要处理只有event2
可用的情况,您可以按照Full Outer Join in MySQL