mysql - Find the min and max date for a record across multiple tables -


मेरे पास 3 टेबल हैं:

  file_list = & gt; वेब सर्वर पर सभी फाइलों की सूची stats_web = & gt; सार्वजनिक वेब से पृष्ठदृश्यों की संख्या stats_reg = & gt; "पंजीकृत उपयोगकर्ता" से पृष्ठदृश्यों की संख्या   

मेरे पास स्कीमा और कुछ नमूना डेटा है

मैं उस दिनांक की गणना करने की कोशिश कर रहा हूं जिसे किसी फ़ाइल को पहली बार मारा गया था सार्वजनिक या एक पंजीकृत उपयोगकर्ता द्वारा।

वर्तमान एसक्यूएल इस तरह दिखता है:

  SELECT list.path, list.mod_date, IF (MIN (ifnull (web.hit_date, 0000-00-00)) & lt; MIN (ifnull (reg.hit_date, 0000-00-00)), MIN (ifnull (web.hit_date, 0000-00-00)), MIN (ifnull (reg.hit_date, 0000) -00-00))) के रूप में 'min_date', यदि (अधिकतम (ifnull (web.hit_date, 0000-00-00)) मैक्स (ifnull (reg.hit_date, 0000-00-00)), मैक्स (ifnull (Web.hit_date, 0000-00-00)), अधिकतम (ifnull (reg.hit_date, 0000-00-00)) AS 'max_date', SUM (ifnull (web.pages, 0)) + SUM (ifnull ( Reg.pages, 0)) file_list सूची से 'page_views' के रूप में बायां शामिल हों stats_web वेब सूची पर list.path = web.path left join stats_reg reg पर list.path = reg.path जहां सूची। '/' वेब / htdocs /% ग्रुप द्वारा सूची।   

समस्या यह है कि यदि कोई आंकड़ा केवल आंकड़ों तालिका में दिखाई देता है तो न्यूनतम दिनांक हमेशा 0 होता है। यह MIN और MAX पर ifnull () के कारण है, लेकिन अगर मैं डॉन 'Ifnull () का उपयोग न करें तो दोनों न्यूनतम और अधिकतम तिथियां शून्य की वापसी होती हैं।

आपको एक तिथि का उपयोग करना चाहिए ifnull की दूसरी तर्क के लिए दूर के भविष्य के लिए, जब इसका उपयोग न्यूनतम से तुलना करने के लिए किया जाता है अन्यथा, पहला शून्य कम से कम 0000-00-00 बनायेगा, और चूंकि यह जल्द से जल्द संभव तिथि है, कोई अन्य तारीख इसे न्यूनतम करने के लिए नहीं हटेगा

यदि आप अपनी क्वेरी की अगली पंक्ति को <पूर्व> IF (MIN (ifnull (web.hit_date, 99 99-12-31)) में बदलते हैं & lt; MIN (ifnull (Reg.hit_date, 99 99-12-31)), MIN (ifnull (web.hit_date, 99 99-12-31)), MIN (ifnull (reg.hit_date, 99 99-12-31))) के रूप में 'min_date' / कोड>

आपको सही परिणाम प्राप्त करना चाहिए।

Comments