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

MYSQL में तिथियों को दिनांक सीमा में बदलें --- तिथियों में अंतराल को कैसे संभालें

यह दृष्टिकोण MySQL के लिए है। यह प्रत्येक "श्रेणी" के लिए एक सामान्य प्रारंभिक तिथि स्थापित करने के लिए एक आदेशित सबक्वेरी के भीतर संयोजन चर का उपयोग करता है। क्रॉस जॉइन का उपयोग केवल वेरिएबल को इनिशियलाइज़ करने के लिए किया जाता है, यह पंक्तियों की संख्या को नहीं बदलता है। एक बार सामान्य प्रारंभ तिथि स्थापित हो जाने के बाद यह बाहरी क्वेरी में क्वेरी द्वारा एक साधारण समूह बन जाता है।

SELECT Item, LOC, RP_IND, dr_begin, MAX(RP_DATE) dr_end
FROM (
  SELECT
         mytable.*
       , @fin := CONVERT(IF(@item<=>item AND @loc<=>loc AND DATEDIFF(rp_date, @d)=1, @fin, rp_date), DATE) AS dr_begin
       , @item := item
       , @loc := loc
       , @d := rp_date
  FROM     mytable CROSS JOIN (SELECT @item:=NULL, @loc:=NULL, @d:=NULL, @fin := NULL) AS init
  ORDER BY item, loc, rp_date
  ) d
GROUP BY  Item, LOC, RP_IND, dr_begin
;

+----+------------+-----+--------+------------+---------------------+
|    |    Item    | LOC | RP_IND |  dr_begin  |       dr_end        |
+----+------------+-----+--------+------------+---------------------+
|  1 | 1003785256 | 543 | Y      | 2016-11-05 | 07.11.2016 00:00:00 |
|  2 | 1003785256 | 543 | Y      | 2016-11-09 | 10.11.2016 00:00:00 |
|  3 | 1003790365 | 150 | Y      | 2016-11-05 | 05.11.2016 00:00:00 |
|  4 | 1003797790 | 224 | Y      | 2016-11-05 | 08.11.2016 00:00:00 |
+----+------------+-----+--------+------------+---------------------+

नोट <=> 1 लौटाता है, अगर दोनों ऑपरेंड शून्य हैं

यहां काम करने वाली क्वेरी देखें:http://rextester.com/SEYG96251

#drop table mytable;

CREATE TABLE mytable(
   Item    INTEGER  NOT NULL
  ,LOC     INTEGER  NOT NULL
  ,RP_DATE DATE  NOT NULL
  ,RP_IND  VARCHAR(1) NOT NULL
);
INSERT INTO mytable(Item,LOC,RP_DATE,RP_IND) VALUES (1003785256,543,'2016-11-05','Y');
INSERT INTO mytable(Item,LOC,RP_DATE,RP_IND) VALUES (1003785256,543,'2016-11-06','Y');
INSERT INTO mytable(Item,LOC,RP_DATE,RP_IND) VALUES (1003785256,543,'2016-11-07','Y');
INSERT INTO mytable(Item,LOC,RP_DATE,RP_IND) VALUES (1003785256,543,'2016-11-09','Y');
INSERT INTO mytable(Item,LOC,RP_DATE,RP_IND) VALUES (1003785256,543,'2016-11-10','Y');
INSERT INTO mytable(Item,LOC,RP_DATE,RP_IND) VALUES (1003790365,150,'2016-11-05','Y');
INSERT INTO mytable(Item,LOC,RP_DATE,RP_IND) VALUES (1003797790,224,'2016-11-05','Y');
INSERT INTO mytable(Item,LOC,RP_DATE,RP_IND) VALUES (1003797790,224,'2016-11-06','Y');
INSERT INTO mytable(Item,LOC,RP_DATE,RP_IND) VALUES (1003797790,224,'2016-11-07','Y');
INSERT INTO mytable(Item,LOC,RP_DATE,RP_IND) VALUES (1003797790,224,'2016-11-08','Y');



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ओओपी पीएचपी पीडीओ मेरा पहला प्रोजेक्ट, क्या मैं सही कर रहा हूं?

  2. नए मैक पर वर्चुअलएन्व में mysqlclient स्थापित नहीं कर सकता

  3. मैं MySQL में टिप्पणियाँ कैसे जोड़ सकता हूँ?

  4. MySQL में संग्रहित प्रक्रियाओं का बैकअप कैसे लें

  5. MySQL उन सभी पंक्तियों को हटा देता है जहाँ आईडी दी गई संख्या से अधिक है