数据库
首页 > 数据库> > mysql – 对一个表的复杂SQL查询

mysql – 对一个表的复杂SQL查询

作者:互联网

这里有张桌子:

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    |

解决方法:

您正在寻找一个简单的“枢轴”或“交叉”技巧:

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;

SQL Fiddle.

标签:mysql,sql,crosstab
来源: https://codeday.me/bug/20190702/1356785.html