MySQL / SQL: केवल डेटाइम कॉलम पर समूह द्वारा


181

एक स्तंभ की तरह एक तालिका होने के साथ: mydate DATETIME...

मेरे पास एक क्वेरी है जैसे:

SELECT SUM(foo), mydate FROM a_table GROUP BY a_table.mydate;

यह datetimeघंटों और मिनटों को मिलाकर पूरा समूह बनाएगा । मैं समूह बनाना चाहता हूं, केवल तारीख तक YYYY/MM/DDनहीं YYYY/MM/DD/HH/mm

क्या कोई जानता है कि इसे कैसे करना है? मैं अभी भी इसे कर सकता हूं (जैसा कि मैं एटीएम हूं), गतिशील रूप से मेरे कोड में, लेकिन मैं कचरा कोड को साफ कर रहा हूं और इसे एसक्यूएल के माध्यम से बनाया जा सकता है मैं अभी पता नहीं लगा सकता हूं :(।


1
इस उत्तर में वर्णित एक बेहतर दृष्टिकोण !
वेबकोड

जवाबों:


287

डेटटाइम के लिए कास्ट करें, फिर इस सिंटैक्स का उपयोग करके ग्रुप:

SELECT SUM(foo), DATE(mydate) FROM a_table GROUP BY DATE(a_table.mydate);

या आप @ orlandu63 के अनुसार उपनाम से ग्रुप बना सकते हैं:

SELECT SUM(foo), DATE(mydate) DateOnly FROM a_table GROUP BY DateOnly;

हालांकि मुझे नहीं लगता कि इससे प्रदर्शन पर कोई फर्क पड़ेगा, यह थोड़ा स्पष्ट है।


1
क्या आप सुनिश्चित हैं कि दूसरा काम करता है? SQL सर्वर पर, यह विफल रहता है, और यह एक अच्छे कारण के लिए विफल रहता है। मुझे उम्मीद है कि यह कहीं और भी विफल होगा। क्या आप पुष्टि कर सकते हैं कि MySQL वास्तव में इस क्वेरी को संभालता है?
टॉमालक

1
मैंने बस कोशिश की और यह ठीक काम करता है। MySQL GROUP BY के बारे में अधिक अनुमति है और यह आपको एक क्वेरी लिखने के लिए भरोसा करता है जो अस्पष्ट नहीं है।
बिल करविन 18

जानकारी के लिए धन्यवाद। मैं तय नहीं कर सकता कि यह अच्छी बात है या नहीं, लेकिन यह MySQL के बारे में मेरी राय में अच्छी तरह से फिट बैठता है। एक तकनीकी पीओवी से - यह कैसे काम करने वाला है? मैं केवल कल्पना कर सकता हूं कि क्वेरी पार्सर वास्तविक अभिव्यक्ति के साथ ग्रुप बीआई के क्लाज में उर्फ ​​को प्रतिस्थापित करता है।
टॉमालक

17
यह एक प्रदर्शन जाल है! ध्यान रखें कि ऐसे फ़ंक्शन का उपयोग करना - DATE () आपको इस स्तंभ पर अनुक्रमणिका का लाभ उठाने की अनुमति नहीं देता है।
कामिल बेदर्नज

मैंने पहले एक का उपयोग किया और यह एक आकर्षण की तरह काम करता था। इस टिप के लिए धन्यवाद
हेलन नेली

20

मैंने पाया कि मुझे महीने और साल के हिसाब से समूह बनाने की जरूरत है इसलिए न तो मेरे लिए काम किया। इसके बजाय मैंने date_format का उपयोग किया

SELECT date
FROM blog 
GROUP BY DATE_FORMAT(date, "%m-%y")
ORDER BY YEAR(date) DESC, MONTH(date) DESC 

2
क्वेरी क्रम से बाहर है
ZJS

18

या:

SELECT SUM(foo), DATE(mydate) mydate FROM a_table GROUP BY mydate;

अधिक कुशल (मुझे लगता है।) क्योंकि आपको प्रति पंक्ति दो बार mydate कास्ट नहीं करना है।


7
यदि MySQL ने रूपांतरण को दो बार चलाया तो मुझे बहुत आश्चर्य होगा। समूह में केवल सामूहिक कार्य और अभिव्यक्तियों को समूह में चुनिंदा कथनों द्वारा अनुमति दी जाती है। इंजन को पहले से ही पता है कि दो अभिव्यक्तियां समान हैं।
तमद्दीन

1
@ Tmdean, 'समूह में केवल सामूहिक कार्य और अभिव्यक्तियों को समूह में चुनिंदा कथनों द्वारा समूह में अनुमति दी जाती है' - क्या आप इसे आसान शब्दों में समझा सकते हैं?
इस्तियाक अहमद

9
SELECT SUM(No), HOUR(dateofissue) 
FROM tablename 
WHERE dateofissue>='2011-07-30' 
GROUP BY HOUR(dateofissue)

यह किसी विशेष दिन से योग द्वारा घंटा देगा!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.