簡體   English   中英

MySQL從一系列相同值中選擇第一條和最后一條記錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM