दिलचस्प पोस्ट
एक प्रकार से एक नया ऑब्जेक्ट उदाहरण प्राप्त करें जावा में सुंदर प्रिंट JSON टाइपिंग निश्चित लंबाई सरणी ACTION_SEND के माध्यम से एंड्रॉइड ऐप से फेसबुक पर टेक्स्ट साझा करें कार्रवाई और कार्रवाई के बीच मतभेद MySQL में डुप्लिकेट रिकॉर्ड खोजें सी # वेबब्रोजर नियंत्रण – फॉर्म InvoxMember ("क्लिक करें") का उपयोग कर कार्य नहीं सबमिट करें सी # कोड में पार्स (बड़ा) एक्सएमएल का सबसे अच्छा तरीका क्या है? मैं एंड्रॉइड पर ओरिएंटेशन परिवर्तन कैसे अक्षम करूं? मैं .NET Framework के साथ एसएसएल एसएमटीपी के माध्यम से ईमेल कैसे भेज सकता हूं? जावा स्क्रिप्ट में दो चर कैसे स्वैप करें एनईटी कंसोल ऐप में कुंजी प्रेस के लिए सुनो एक धुंधला ओवरले दृश्य बनाना गैर कैप्चरिंग समूह क्या है? प्रश्न चिह्न क्या एक बृहदान्त्र के बाद (? :) मतलब है? मैं एक सुरक्षित लुआ सैंडबॉक्स कैसे बना सकता हूं?

MySQL क्वेरी ग्रुप द्वारा दिन / महीना / वर्ष

क्या यह संभव है कि मैं TIMESTAMP फ़ील्ड के रूप में एक वर्ष, महीने या दिन जैसे निर्धारित समय में कितने अभिलेखों को गिनने के लिए एक सरल क्वेरी TIMESTAMP , जैसे:

 SELECT COUNT(id) FROM stats WHERE record_date.YEAR = 2009 GROUP BY record_date.YEAR 

या और भी:

 SELECT COUNT(id) FROM stats GROUP BY record_date.YEAR, record_date.MONTH 

मासिक आंकड़ा रखने के लिए

धन्यवाद!

वेब के समाधान से एकत्रित समाधान "MySQL क्वेरी ग्रुप द्वारा दिन / महीना / वर्ष"

 GROUP BY YEAR(record_date), MONTH(record_date) 

MySQL में दिनांक और समय फ़ंक्शन देखें

 GROUP BY DATE_FORMAT (record_date, '%Y%m') 

नोट (मुख्यतः, संभावित डाउनवॉटरों के लिए) वर्तमान में, यह अन्य सुझावों के रूप में कुशल नहीं हो सकता है फिर भी, मैं इसे एक विकल्प के रूप में छोड़ देता हूं, और एक भी, यह देखने में कितना तेजी से काम करता है कि अन्य समाधान कितने हैं I (जब तक आप अंतर को देख नहीं सकते तब तक धीमी गति से आप धीमी गति से नहीं बता सकते हैं।) साथ ही, समय के साथ ही, अनुकूलन के संबंध में MySQL के इंजन में परिवर्तन किया जा सकता है ताकि कुछ इस पर (शायद, ऐसा न हो दूर) भविष्य में, ज्यादातर दूसरों के साथ दक्षता में काफी तुलनीय हो।

मैंने ऊपर 'WHERE' कथन का उपयोग करने की कोशिश की, मैंने इसके सही विचार किया क्योंकि कोई भी इसे सही नहीं करता था लेकिन मैं गलत था; कुछ खोजों के बाद मुझे पता चला कि यह WHERE कथन के लिए सही सूत्र है, इसलिए कोड इस तरह होता है:

 SELECT COUNT(id) FROM stats WHERE YEAR(record_date) = 2009 GROUP BY MONTH(record_date) 

इसको आजमाओ

 SELECT COUNT(id) FROM stats GROUP BY EXTRACT(YEAR_MONTH FROM record_date) 

एक्सट्रैक्ट (यूनिट फ़ॉर डेट) फ़ंक्शन बेहतर है क्योंकि कम समूह का उपयोग किया जाता है और फ़ंक्शन एक संख्या मान लौटाता है।

तुलना की स्थिति जब ग्रुपिंग DATE_FORMAT फ़ंक्शन की तुलना में तेज़ हो जाएगी (जो स्ट्रिंग मान लौटाते हैं)। फ़ंक्शन | फ़ील्ड का उपयोग करने की कोशिश करें जो एसक्यूएल तुलना की स्थिति के लिए गैर-स्ट्रिंग मान लौटाता है (डब्ल्यूएचईईईईईईईईआरए, ऑर्डर बाय, ग्रुप बाय)।

यदि आपकी खोज कई सालों से अधिक है, और आप अभी भी मासिक समूह बनाना चाहते हैं, तो मैं सुझाव देता हूं:

संस्करण 1:

 SELECT SQL_NO_CACHE YEAR(record_date), MONTH(record_date), COUNT(*) FROM stats GROUP BY DATE_FORMAT(record_date, '%Y%m') 

संस्करण # 2 (अधिक कुशल) :

 SELECT SQL_NO_CACHE YEAR(record_date), MONTH(record_date), COUNT(*) FROM stats GROUP BY YEAR(record_date)*100 + MONTH(record_date) 

मैंने इन संस्करणों की एक बड़ी तालिका पर 1,357,918 पंक्तियों (इनऑनडब) के साथ तुलना की है, और 2 संस्करण में बेहतर परिणाम दिखता है।

संस्करण 1 (औसत 10 निष्पादित) : 1.404 सेकंड
संस्करण 2 (औसत 10 निष्पादित) : 0.780 सेकंड

( SQL_NO_CACHE कुंजी को MySQL को CACHING से रोकने के लिए जोड़ा गया है।)

यदि आप MySQL में तारीख तक समूह चाहते हैं तो नीचे दिए गए कोड का उपयोग करें:

  SELECT COUNT(id) FROM stats GROUP BY DAYOFMONTH(record_date) 

आशा है कि यह उन लोगों के लिए कुछ समय बचाता है जो इस सूत्र को ढूंढने जा रहे हैं।

यदि आप एक विशेष वर्ष (जैसे 2000) के लिए रिकॉर्ड फ़िल्टर करना चाहते हैं, तो इस तरह के WHERE खंड को अनुकूलित करें:

 SELECT MONTH(date_column), COUNT(*) FROM date_table WHERE date_column >= '2000-01-01' AND date_column < '2001-01-01' GROUP BY MONTH(date_column) -- average 0.016 sec. 

के बजाय:

 WHERE YEAR(date_column) = 2000 -- average 0.132 sec. 

परिणाम तालिका स्तंभ के साथ उत्पन्न होते हैं जिसमें दिनांक के स्तंभ पर 300k पंक्तियों और सूचकांक होते हैं।

GROUP BY क्लॉज के लिए, मैंने उपर्युक्त तालिका के खिलाफ तीन रूपों का परीक्षण किया; यहां परिणाम हैं:

 SELECT YEAR(date_column), MONTH(date_column), COUNT(*) FROM date_table GROUP BY YEAR(date_column), MONTH(date_column) -- codelogic -- average 0.250 sec. SELECT YEAR(date_column), MONTH(date_column), COUNT(*) FROM date_table GROUP BY DATE_FORMAT(date_column, '%Y%m') -- Andriy M -- average 0.468 sec. SELECT YEAR(date_column), MONTH(date_column), COUNT(*) FROM date_table GROUP BY EXTRACT(YEAR_MONTH FROM date_column) -- fu-chi -- average 0.203 sec. 

अंतिम एक विजेता है

यदि आप प्रत्येक माह के हर महीने प्रति माह पंक्ति गणना के साथ मासिक आंकड़े प्राप्त करना चाहते हैं, तो यह कोशिश करें:

 SELECT count(id), YEAR(record_date), MONTH(record_date) FROM `table` GROUP BY YEAR(record_date), MONTH(record_date) ORDER BY YEAR(record_date) DESC, MONTH(record_date) DESC 

निम्नलिखित क्वेरी ने ओरेकल डाटाबेस 12 सी रिलीज 12.1.0.1.0 में मेरे लिए काम किया

 SELECT COUNT(*) FROM stats GROUP BY extract(MONTH FROM TIMESTAMP), extract(MONTH FROM TIMESTAMP), extract(YEAR FROM TIMESTAMP); 

आप इसे केवल GROUP BY में MySQL DATE_FORMAT () फ़ंक्शन कर सकते हैं। आप कुछ मामलों में अतिरिक्त स्पष्टता के लिए एक अतिरिक्त कॉलम जोड़ना चाह सकते हैं जैसे रिकॉर्ड जहां कई सालों के लिए होते हैं, उसी महीने अलग-अलग वर्षों में होता है। यहां कई विकल्प हैं, जिससे आप इसे अनुकूलित कर सकते हैं। कृपया इसे शुरू करने के लिए पढ़ें आशा है कि यह आपके लिए बहुत उपयोगी होनी चाहिए आपकी समझ के लिए नमूना प्रश्न यहाँ है

 SELECT COUNT(id), DATE_FORMAT(record_date, '%Y-%m-%d') AS DAY, DATE_FORMAT(record_date, '%Y-%m') AS MONTH, DATE_FORMAT(record_date, '%Y') AS YEAR, FROM stats WHERE YEAR = 2009 GROUP BY DATE_FORMAT(record_date, '%Y-%m-%d '); 

मैं एक वर्ष समूह चयन को पसंद करना पसंद करता हूं:

 SELECT COUNT(*) FROM stats WHERE record_date >= :year AND record_date < :year + INTERVAL 1 YEAR; 

इस तरह से आप एक साल में एक बार बाइंड कर सकते हैं, जैसे '2009' , नामित पैरामीटर के साथ और '-01-01' जोड़ने या '2010' अलग होने के बारे में चिंता करने की ज़रूरत नहीं है।

साथ ही, जैसा कि संभवतया हम पंक्तियों की गिनती कर रहे हैं और id कभी NULL नहीं NULL , मुझे COUNT(*) से COUNT(id)

इसी तरह वर्तमान में सक्रिय रूप से अभी तक कम और अधिक लचीला वैकल्पिक प्रदर्शन के साथ पूरा और सरल समाधान:

 SELECT COUNT(*) FROM stats -- GROUP BY YEAR(record_date), MONTH(record_date), DAYOFMONTH(record_date) GROUP BY DATE_FORMAT(record_date, '%Y-%m-%d') 

.... group by to_char(date, 'YYYY') -> 1989

.... group by to_char(date,'MM') -> 05

.... group by to_char(date,'DD') —> 23

.... group by to_char(date,'MON') —> मई

.... group by to_char(date,'YY') —> 89