2010-03-31 8 views
5

इस क्वेरीmysql मिनट अशक्त पर ध्यान नहीं देता - जरूरत वैकल्पिक हल/tweak

SELECT min(date) min_date FROM order_products group by order_id 

min_date आदेश आईडी के एक समूह में NULL मूल्यों पर ध्यान नहीं देता है।

मेरे मामले में मुझे min_date = NULL चाहिए यदि समूह में ऑर्डर_प्रॉडक्ट्स तारीख में शून्य मान के साथ टुपल हैं।

कोई विचार मैं इसे कैसे प्राप्त कर सकता हूं?

उत्तर

9

एक सरल समाधान का हो सकता है:

SELECT min(IFNULL(date, '1970-01-01')) AS min_date 
FROM order_products 
GROUP BY order_id 

तो, अगर 1970/01/01 अप बदल जाता है, आप जानते हैं कि एक शून्य मूल्य नहीं है कि।

+0

यह क्वेरी सभी min_date मानों को '1970-01-01' के रूप में लौटाती है। क्या आप वाकई यह काम करते हैं, क्या आपने पहले इसे आजमाया है? – shikhar

+1

@ शिखर: नहीं, मैंने पहले इसे आजमाया नहीं, लेकिन मैंने अभी कोशिश की और यह मेरे लिए काम कर रहा है। शायद सभी आदेशों में एनयूएलएल हैं? – Bobby

+0

अरे धन्यवाद .. मैं वास्तव में सभी NULLs था .. यह काम किया – shikhar

0

ऐसा करने के तरीकों में से एक, यदि आपकी समस्या डोमेन "पूर्ण न्यूनतम दिनांक" को परिभाषित करने की अनुमति देता है, तो एक शून्य क्षेत्र को गैर-शून्य में बदलने के लिए ISNULL()/COALESCE() अभिव्यक्ति का उपयोग करना है। , तो अगर परिणाम सेट खाली है, सामान में जोड़ने जहां तिथि है nulls के साथ पहली बार चयन सामान -

ISNULL(dateField, '1000-01-01')

एक और (च कोई सार्थक "छोटी से छोटी" डिफ़ॉल्ट परिभाषित किया जा सकता) 2 प्रश्नों के माध्यम से यह करने के लिए है नहीं अशक्त

0
select case when count(date)=sum(1) then min(date) else null end 

या, जब सभी पंक्तियां शून्य नहीं होती हैं, तो न्यूनतम तिथि लौटाएं, अन्यथा शून्य वापस आएं।

1

यदि प्रश्न एकाधिक कॉलम से न्यूनतम दिनांक ढूँढने के बारे में है, तो निम्नलिखित मदद कर सकता है;

SELECT 
     LEAST 
      (IFNULL(date_1, date(CURRENT_DATE()+1)), 
      IFNULL(date_2, date(CURRENT_DATE()+1)), 
      IFNULL(date_3, date(CURRENT_DATE()+1))) as MinimumDate 
FROM YourTable; 
संबंधित मुद्दे