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");