इसके लिए आपको सीटीई की आवश्यकता नहीं है, यह आवश्यकता से अधिक महंगा होगा।
और आपको timestamp
पर डालने की आवश्यकता नहीं है , परिणाम पहले से ही है डेटा प्रकार का timestamp
जब आप timestamp
feed फ़ीड करते हैं टाइप करने के लिए generate_series()
. विवरण यहाँ:
- PostgreSQL में दो तिथियों के बीच समय श्रृंखला उत्पन्न करना
पोस्टग्रेज में 9.3 या बाद में आप LATERAL
. का उपयोग कर सकते हैं शामिल हों:
SELECT to_char(ts, 'YYYY-MM-DD HH24') AS formatted_ts
FROM (
SELECT min(start_timestamp) as first_date
, max(start_timestamp) as last_date
FROM header_table
) h
, generate_series(h.first_date, h.last_date, interval '1 hour') g(ts);
वैकल्पिक रूप से to_char()
. के साथ आपके द्वारा उल्लिखित प्रारूप में परिणाम को टेक्स्ट के रूप में प्राप्त करने के लिए।
यह किसी भी . में काम करता है पोस्टग्रेज संस्करण:
SELECT generate_series(min(start_timestamp)
, max(start_timestamp)
, interval '1 hour') AS ts
FROM header_table;
आमतौर पर थोड़ा तेज़।SELECT
में सेट-रिटर्निंग फ़ंक्शन को कॉल करना सूची एक गैर-मानक-एसक्यूएल सुविधा है और कुछ लोगों द्वारा इसे पसंद किया जाता है। इसके अलावा, व्यवहार संबंधी विषमताएं थीं (हालांकि इस साधारण मामले के लिए नहीं) जो अंततः पोस्टग्रेज 10 में तय की गई थीं। देखें:
- सेलेक्ट क्लॉज में कई सेट-रिटर्निंग फंक्शन के लिए अपेक्षित व्यवहार क्या है?
नोट NULL . में एक सूक्ष्म अंतर हैंडलिंग:
. के बराबर
max(start_timestamp)
के साथ प्राप्त किया जाता है
ORDER BY start_timestamp DESC NULLS LAST
LIMIT 1
बिना NULLS LAST
NULL मान पहले आते हैं अवरोही क्रम में (यदि वहाँ कर सकते हैं start_timestamp
में NULL मान हो ) आपको last_date
. के लिए NULL मिलेगा और आपकी क्वेरी खाली हो जाएगी।
विवरण:
- एक PostgreSQL क्वेरी में DESC ऑर्डर करते समय NULL मान पहले क्यों आते हैं?