इस क्वेरी को आजमाएं
SELECT
a.id,
a.start_hour,
a.end_hour,
TIMEDIFF(la.start_hour, a.end_hour) as `Free Time`
FROM appointment as a
LEFT JOIN(SELECT * FROM appointment LIMIT 1,18446744073709551615) AS la
ON la.id = a.id + 1
LEFT JOIN (SELECT * FROM appointment) AS ra ON a.id = ra.id
यह ये परिणाम दिखाएगा
+---------------------------------------------+
¦ id ¦ start_hour BY ¦ end_hour | Free Time |
¦----+---------------¦------------------------|
¦ 1 ¦ 08:00:00 ¦ 08:15:00 | 05:45:00 |
¦ 2 ¦ 14:00:00 ¦ 14:30:00 | 02:30:00 |
¦ 3 ¦ 17:00:00 ¦ 17:45:00 | 03:15:00 |
¦ 4 ¦ 21:00:00 ¦ 21:00:00 | (NULL) |
+--------------------+------------------------+
इसके अलावा आपके पास तालिका में 21:00:00 होना चाहिए या आप अंतिम समय अंतर प्राप्त करने में सक्षम नहीं होंगे। मैंने तालिका में प्रारंभ और समाप्ति तिथि के रूप में 21:00:00 दर्ज किया।
संपादित
यह संशोधित क्वेरी है
SELECT
a.id,
a.end_hour AS `Free time Start`,
IFNULL(la.start_hour,a.end_hour) AS `Free Time End`,
IFNULL(TIMEDIFF(la.start_hour, a.end_hour),'00:00:00') AS `Total Free Time`
FROM appointment AS a
LEFT JOIN (SELECT * FROM appointment LIMIT 1,18446744073709551615) AS la
ON la.id = (SELECT MIN(id) FROM appointment where id > a.id LIMIT 1)
और परिणाम है
+--------------------------------------------------------+
¦ id ¦ Free time Start ¦ Free Time End | Total Free Time |
¦----+-----------------¦---------------------------------|
¦ 1 ¦ 08:15:00 ¦ 14:00:00 | 05:45:00 |
¦ 2 ¦ 14:30:00 ¦ 17:00:00 | 02:30:00 |
¦ 3 ¦ 17:45:00 ¦ 21:00:00 | 03:15:00 |
¦ 4 ¦ 21:00:00 ¦ 21:00:00 | 00:00:00 |
+----------------------+---------------------------------+
इस प्रश्न से सीखने के बिंदु हैं
- Timediff फ़ंक्शन का उपयोग। टाइमडिफ़ ('अंत समय', 'प्रारंभ समय')
- ऊपरी संख्या के साथ जुड़ना
- लंबे ऑफ़सेट और शून्य के बजाय 1 से शुरू होने वाली सीमा के साथ जुड़ने में पहले रिकॉर्ड से बचें
- IFNULL उपयोग ifnull('अगर यहां शून्य आता है', 'इसे तब चुनें')