Mysql找到另一个

时间:2016-05-18 21:39:40

标签: mysql

我很难做出连贯的陈述,但我可以提供样本集

ID STATUS DATE
1  A      2016-01-01
2  A      2016-01-01
2  B      2016-01-02
3  C      2016-01-13
4  D      2016-01-14
5  A      2016-01-15
5  B      2016-01-16
6  A      2016-01-17
7  C      2016-01-18
8  B      2016-01-19
9  B      2016-01-20

我想要一个可以确定两件事的sql语句: 1)有多少项从STATUS = A到STATUS = B,具有相同的ID 2)我只想显示具有上述状态的行 - 如下所示:

ID STATUS DATE        
2  A      2016-01-01
2  B      2016-01-02
5  A      2016-01-15
5  B      2016-01-16

COUNT(distinct ID) of that result should return 2 in this case

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

将表与自身连接起来,将行与后面的行匹配,并使用相同的ID。

SELECT t1.id, t1.status AS start_status, t1.date AS start_date,
        t2.status AS end_status, t2.date AS end_date
FROM yourTable AS t1
JOIN yourTable AS t2 ON t1.id = t2.id AND t1.date = date_sub(t2.date, interval 1 day)
WHERE t1.status = 'A' AND t2.status = 'B'

这将同时显示两行,例如

id start_status start_date end_status end_date
2  A            2016-01-01 B          2016-01-02
5  A            2016-01-15 B          2016-01-16
相关问题