2016-05-18 2 views
0

Трудно для меня, чтобы положить в когерентном заявлении, но я могу дать образец набор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

Соедините таблицу с самим собой, сопоставляя строки с строкой после них с тем же идентификатором.

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 
+0

Спасибо Бармар, я дам ему попробовать завтра, когда я вернусь на работу – kronus

+0

Спасибо, Бармар, это было потрясающе. Я не использовал часть date_sub, потому что я подключил этот sql к SiSense, и оттуда я использовал виджет календаря для выбора временного интервала, но, несмотря на это, он работал отлично – kronus

Смежные вопросы