[英]MySQL select first and last records from a series of same value
I have a table like this 我有这样的桌子
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
I am using MySQL. 我正在使用MySQL。 What i need is a sql query or stored procedure which selects only rows with Ids (1,2,3,5,6,8,9,10).
我需要的是一个SQL查询或存储过程,该过程仅选择具有ID(1,2,3,5,6,8,9,10)的行。 ie i need the first and last record from a series of same "status" records after ordering by timestamp.
即我需要按时间戳排序后,从一系列相同的“状态”记录中选择第一个和最后一个记录。 Is this actually doable?.
这实际上可行吗? Help!!!
救命!!!
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.