समस्या:
आप PostgreSQL डेटाबेस में महीने के हिसाब से रिकॉर्ड को समूहबद्ध करना चाहेंगे।
उदाहरण:
हमारे डेटाबेस में watch
कॉलम में डेटा के साथ id
, name
, और production_timestamp
।
आईडी | <थ>नाम <थ>प्रोडक्शन_टाइमस्टैम्प||
---|---|---|
1 | देखो | 2019-03-01 11:45:23 |
2 | स्मार्टवॉच | 2019-09-15 07:35:13 |
3 | स्मार्टबैंड | 2019-09-22 17:22:05 |
समाधान:
आप DATE_TRUNC()
. का उपयोग कर सकते हैं महीने के हिसाब से तालिका में समूह रिकॉर्ड करने के लिए कार्य करता है।
यहां वह प्रश्न है जो आप लिखेंगे:
SELECT DATE_TRUNC('month',production_timestamp) AS production_to_month, COUNT(id) AS count FROM watch GROUP BY DATE_TRUNC('month',production_timestamp);
ये रहा क्वेरी का नतीजा:
उत्पादन_से_माह | <थ>गिनती|
---|---|
2019-03-01 00:00:00 | 1 |
2019-09-01 00:00:00 | 2 |
चर्चा:
DATE_TRUNC()
का उपयोग करें फ़ंक्शन यदि आप किसी पोस्टग्रेएसक्यूएल डेटाबेस से विशिष्ट परिशुद्धता के साथ दिनांक या समय पुनर्प्राप्त करना चाहते हैं। (हमारे उदाहरण में, हमने महीने की सटीकता का इस्तेमाल किया।)
यह फ़ंक्शन दो तर्क लेता है। सबसे पहले, हमारे पास दिनांक भाग विनिर्देशक है (हमारे उदाहरण में, 'माह')। ध्यान दें कि विनिर्देशक एक स्ट्रिंग है और इसे उद्धरणों में संलग्न करने की आवश्यकता है।
दूसरा तर्क टाइमस्टैम्प मान है; यह टाइमस्टैम्प मान या टाइमस्टैम्प कॉलम का नाम लौटाने वाला एक्सप्रेशन हो सकता है। (हमारे उदाहरण में, हम production_timestamp
. कॉलम का उपयोग करते हैं )
फ़ंक्शन DATE_TRUNC()
टाइमस्टैम्प को दी गई सटीकता (इस मामले में, महीने) में काट देता है। हमारे डेटाबेस में, स्मार्टवॉच उत्पादन की तारीख है 2019-09-15 07:35:13
; महीने की सटीकता के लिए इसे छोटा करने के बाद, यह 2019-09-01 00:00:00
हो जाता है . महीने-स्तर की सटीकता के कारण दिन को '01' के रूप में प्रदर्शित किया जाता है और समय को शून्य से भरा जाता है। (टाइमस्टैम्प के काटे गए दिनांक भागों (जैसे दिन, महीने) को एक से बदल दिया जाता है।)
PostgreSQL में महीने के हिसाब से रिकॉर्ड बनाना बहुत आम है। हमारे उदाहरण में, प्रत्येक माह के लिए कुल उत्पादों की संख्या होती है। (COUNT()
कुल फ़ंक्शन उत्पादों की संख्या की गणना करता है)। यदि आप एक समग्र फ़ंक्शन का उपयोग करके रिकॉर्ड समूहित करते हैं, तो आपको ग्रुप बाय क्लॉज का उपयोग करना होगा। ग्रुप बाय क्लॉज के बाद, आपको सेलेक्ट स्टेटमेंट में एग्रीगेट फंक्शन के साथ इस्तेमाल किए गए कॉलम या एक्सप्रेशन को रखना चाहिए। (हमारे उदाहरण में, यह DATE_TRUNC( 'month', production_timestamp)
है ।)
बेशक, आपको DATE_TRUNC()
. का उपयोग करने की आवश्यकता नहीं है केवल समूह रिकॉर्ड के लिए कार्य करें। आप इसका उपयोग किसी दी गई तारीख के लिए महीने का पहला दिन प्राप्त करने के लिए भी कर सकते हैं।
प्रत्येक घड़ी के लिए, नाम और उत्पादन की तारीख से महीने की सटीकता प्राप्त करें - किसी समूहीकरण की आवश्यकता नहीं है। यहां वह प्रश्न है जो आप लिखेंगे:
SELECT name, DATE_TRUNC('month',production_timestamp) AS production_to_month FROM watch;
ये रहा परिणाम:
नाम | <थ>उत्पादन_से_माह|
---|---|
देखो | 2019-03-01 00:00:00 |
स्मार्टवॉच | 2019-09-01 00:00:00 |
स्मार्टबैंड | 2019-09-01 00:00:00 |
इस क्वेरी में, फ़ंक्शन DATE_TRUNC()
टाइमस्टैम्प को महीने की सटीकता से छोटा करता है। हमारे डेटाबेस में, स्मार्टवॉच उत्पादन की तारीख है '2019-09-15 07:35:13'
; अब यह '2019-09-01 00:00:00'
, जो महीने का पहला दिन है।