![](/img/trans.png)
[英]MySQL select from multiple records only records with first and last date
[英]MySQL select first and last records from a series of same value
我有這樣的桌子
Id Status TimeStamp
1 1 2012-02-03 00:00:05
2 1 2012-02-03 00:00:10
3 0 2012-02-03 00:00:15
4 0 2012-02-03 00:00:20
5 0 2012-02-03 00:00:25
6 1 2012-02-03 00:00:30
7 1 2012-02-03 00:00:35
8 1 2012-02-03 00:00:40
9 0 2012-02-03 00:00:45
10 1 2012-02-03 00:00:50
我正在使用MySQL。 我需要的是一個SQL查詢或存儲過程,該過程僅選擇具有ID(1,2,3,5,6,8,9,10)的行。 即我需要按時間戳排序后,從一系列相同的“狀態”記錄中選擇第一個和最后一個記錄。 這實際上可行嗎? 救命!!!
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
,status TINYINT NOT NULL
,TimeStamp TIMESTAMP NOT NULL
);
INSERT INTO my_table VALUES
(1 ,1 ,'2012-02-03 00:00:05'),
(2 ,1 ,'2012-02-03 00:00:10'),
(3 ,0 ,'2012-02-03 00:00:15'),
(4 ,0 ,'2012-02-03 00:00:20'),
(5 ,0 ,'2012-02-03 00:00:25'),
(6 ,1 ,'2012-02-03 00:00:30'),
(7 ,1 ,'2012-02-03 00:00:35'),
(8 ,1 ,'2012-02-03 00:00:40'),
(9 ,0 ,'2012-02-03 00:00:45'),
(10 ,1 ,'2012-02-03 00:00:50');
SELECT a.id start
, MIN(c.id) End
FROM my_table a
LEFT
JOIN my_table b
ON b.status = a.status
AND b.id = a.id - 1
LEFT
JOIN my_table c
ON c.status = a.status
AND c.id >= a.id
LEFT
JOIN my_table d
ON d.status = a.status
AND d.id = c.id + 1
WHERE b.id IS NULL
AND c.id IS NOT NULL
AND d.id IS NULL
GROUP
BY a.id;
+-------+------+
| start | End |
+-------+------+
| 1 | 2 |
| 3 | 5 |
| 6 | 8 |
| 9 | 9 |
| 10 | 10 |
+-------+------+
這是一樣的小提琴
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.