इसके लिए दो कदम:
एक, आपको एक सप्ताह-छंटनी ऑपरेशन की आवश्यकता है -- जिसमें आपका DATETIME
लगेगा आइटम और पिछले रविवार की मध्यरात्रि को वापस दें (यदि आपका व्यवसाय नियम कहता है कि सप्ताह रविवार से शुरू होता है)।
यह एक उपयुक्त GROUP BY आइटम बन जाता है। WEEK() / YEAR() हैक इसके लिए उपयुक्त नहीं है। यह वास्तव में प्रत्येक वर्ष के अंतिम/पहले सप्ताह में गड़बड़ी करता है।
मेरे अनुभव में, यह अभिव्यक्ति आपके लिए सप्ताह-छंटनी की चाल करेगी, रविवार - शनिवार,
FROM_DAYS(TO_DAYS(TIMESTAMP) -MOD(TO_DAYS(TIMESTAMP) -1, 7))
सोमवार-रविवार सप्ताह प्राप्त करने के लिए, इस अभिव्यक्ति का प्रयोग करें।
FROM_DAYS(TO_DAYS(TIMESTAMP) -MOD(TO_DAYS(TIMESTAMP) -2, 7))
तो आप यह कर सकते हैं।
SELECT COUNT(whatever), SUM(whatelse),
FROM_DAYS(TO_DAYS(event_time) -MOD(TO_DAYS(event_time) -1, 7)) as WEEKSTART,
FROM TABLE
GROUP BY FROM_DAYS(TO_DAYS(event_time) -MOD(TO_DAYS(event_time) -1, 7))
MySQL में हफ्ते दर हफ्ते ग्रुप कैसे करें?
दूसरा, आपको उस छोटी तिथि में छह दिन जोड़ने होंगे, ताकि आप प्रत्येक सप्ताह के अंतिम दिन को पहले दिन के साथ प्रदर्शित कर सकें।
नेस्टेड क्वेरी के साथ ऐसा करने का यह एक अच्छा तरीका है
SELECT whats, elses, weekstart, weekstart + INTERVAL 6 DAY AS weekend
FROM (
SELECT COUNT(whatever) AS whats, SUM(whatelse) AS elses,
FROM_DAYS(TO_DAYS(event_time) -MOD(TO_DAYS(event_time) -1, 7)) AS weekstart,
FROM TABLE
GROUP BY FROM_DAYS(TO_DAYS(event_time) -MOD(TO_DAYS(event_time) -1, 7))
) AS summary
ORDER BY weekstart
यह बहुत कुछ कर रहे हैं? मेरा सुझाव है कि आप एक संग्रहित TRUNC_WEEK
. बनाएं समारोह।