Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

केवल स्थिति परिवर्तन शामिल करने के लिए दैनिक स्थिति तालिका को कम करें

निम्नलिखित पर विचार करें:

स्कीमा

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(user_id INT NOT NULL
,status CHAR(3) NOT NULL
,date DATE NOT NULL
,PRIMARY KEY(user_id,date)
);

INSERT INTO my_table VALUES
(1, 'GRE', '2018-09-02'),
(1, 'GRE', '2018-09-03'),
(1, 'PRO', '2018-09-04'),
(1, 'PRO', '2018-09-05'),
(1, 'PRO', '2018-09-06'),
(1, 'GRE', '2018-09-07'),
(1, 'GRE', '2018-09-08'),
(1, 'GRE', '2018-09-09'),
(1, 'GRE', '2018-09-10'),

(2, 'GRE', '2018-09-02'),
(2, 'GRE', '2018-09-03'),
(2, 'PRO', '2018-09-04'),
(2, 'PRO', '2018-09-05'),
(2, 'PRO', '2018-09-06'),
(2, 'GRE', '2018-09-07'),
(2, 'GRE', '2018-09-08'),
(2, 'GRE', '2018-09-09'),
(2, 'GRE', '2018-09-10');

प्रश्न

WITH t AS (
  SELECT user_id
       , status
       , date
       , DENSE_RANK() OVER (PARTITION BY user_id ORDER BY date) 
       - DENSE_RANK() OVER (PARTITION BY user_id,status ORDER BY DATE) grp
    FROM my_table
    )
SELECT t.user_id
     , t.status
     , MIN(t.date) start
     , MAX(t.date) finish
  FROM t
 GROUP  
    BY user_id
     , status
     , grp
 ORDER  
    BY user_id
     , start;
     

+---------+--------+------------+------------+
| user_id | status | start      | finish     |
+---------+--------+------------+------------+
|       1 | GRE    | 2018-09-02 | 2018-09-03 |
|       1 | PRO    | 2018-09-04 | 2018-09-06 |
|       1 | GRE    | 2018-09-07 | 2018-09-10 |
|       2 | GRE    | 2018-09-02 | 2018-09-03 |
|       2 | PRO    | 2018-09-04 | 2018-09-06 |
|       2 | GRE    | 2018-09-07 | 2018-09-10 |
+---------+--------+------------+------------+


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql में दाएँ तालिका के लिए शर्त के साथ बाएँ शामिल हों

  2. ऑर्डर कॉलम MySQL अपडेट कर रहा है?

  3. Java.sql.DriverManager.getConnection(...) क्यों लटक रहा है?

  4. MySQL में दो डेटाटाइम्स के बीच माइनस ऑपरेटर का व्यवहार क्या है?

  5. क्या होता है जब मैं एक पीडीओ स्टेटमेंट में बूलियन ट्रू-फाल्स को एक पैरामीटर के रूप में भेजता हूं जो एक इंट फील्ड से जुड़ा होता है?