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

मेरे एसक्यूएल डेटाबेस में दो टाइमस्टैम्प रिकॉर्ड के बीच प्रत्येक मिनट से सभी टाइमस्टैम्प मान अंतराल को कैसे खोजें?

https://stackoverflow.com/a/45992247/7616138 की सहायता से MySQL I में एक श्रृंखला उत्पन्न करने के लिए fiddled इसे बनाने के लिए:

मान लें कि आपकी तालिका entries कहलाती है , निम्न क्वेरी आपके द्वारा मांगे गए परिणाम को उत्पन्न करती है। कृपया नहीं, कि यह क्वेरी बहुत कुशल नहीं है क्योंकि यह मिनटों की श्रृंखला बनाने के लिए क्रॉस जॉइन का उपयोग करती है। यदि आपका अंतराल बड़ा है, तो आपको क्रॉस जॉइन को बढ़ाने की आवश्यकता हो सकती है।

SELECT 
    a.*, 
    DATE_ADD(DATE_SUB(a.open_date, INTERVAL SECOND(a.open_date) SECOND), INTERVAL gen_time MINUTE) AS gen_date_time
FROM 
    entries AS a
    LEFT JOIN
        (
            SELECT
                m3 * 1000 + m2 * 100 + m1 * 10 + m0 AS gen_time
            FROM
                (SELECT 0 m0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) AS m0,
                (SELECT 0 m1 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) AS m1,
                (SELECT 0 m2 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) AS m2,
                (SELECT 0 m3 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) AS m3
            ORDER BY
                gen_time asc
        ) AS b ON (DATE_ADD(a.open_date, INTERVAL gen_time MINUTE) <= a.close_date)
ORDER BY
    a.id,
    gen_date_time

व्याख्या:

प्रत्येक पंक्ति जैसे SELECT 0 m0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 0 से 9 तक की संख्याएँ उत्पन्न करता है। इनमें से कई पंक्तियों को एक साथ मिलाने से इन संख्याओं का हर संभव संयोजन मिलता है। हम प्रत्येक पंक्ति का उपयोग open_date . में जोड़ने के लिए मिनटों की संख्या का एक विशिष्ट अंक बनाने के लिए करते हैं (m3 * 1000 + m2 * 100 + m1 * 10 + m0 ) मिनटों की यह श्रृंखला केवल उतने ही मिनटों का उपयोग करके प्रविष्टि तालिका में शामिल हो जाती है, जितने अंतराल में फिट हों (DATE_ADD(a.open_date, INTERVAL gen_time MINUTE) <= a.close_date ) SELECT . में open_date मिनट तक पूर्णांकित किया जाता है (DATE_SUB(a.open_date, INTERVAL SECOND(a.open_date) SECOND) ) और मिनटों की संख्या जोड़ी जाती है (DATE_ADD(..., INTERVAL gen_time MINUTE) )।

अनुमानित स्कीमा और नमूना डेटा:

CREATE TABLE entries (
  id INT AUTO_INCREMENT PRIMARY KEY,
  open_date TIMESTAMP,
  close_date TIMESTAMP
);

INSERT INTO entries (open_date, close_date) VALUES
  ("2019-07-03 16:28:39.497", "2019-07-04 16:28:39.497"),
  ("2019-07-04 15:28:39.497", "2019-07-05 19:28:39.497");



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. त्रुटि 1062 (23000):'प्राथमिक' कुंजी के लिए डुप्लिकेट प्रविष्टि '2147483647'

  2. Mysql केस जब ज्वाइन स्टेटमेंट एरर

  3. क्या MySQL में एक चर को घटाना संभव है?

  4. C:\webdev\wamp\www\ MembershipSite\classes\Mysql.php लाइन 9 पर उपयोगकर्ता 'उपयोगकर्ता नाम'@'लोकलहोस्ट' (पासवर्ड का उपयोग कर:हाँ) के लिए प्रवेश निषेध

  5. MySQL - अल्पविराम का उपयोग करके एकल स्ट्रिंग्स में मानों को कैसे विभाजित करें?