तो मैं, 2 टेबल देखभाल और ग्राहक है इसएक विशिष्ट अवधि में सभी उपलब्ध आइटम का चयन करें
client {
id,
name
}
caring {
id,
startDate,
endDate,
clientId
}
जैसे मैं सभी ग्राहकों है कि कम से कम एक दिन के दो प्रदान की तिथियों के बीच उपलब्ध प्राप्त करने की आवश्यकता है, तो आप देख सकते हैं संदर्भ के रूप में मेरा स्क्रीनशॉट।
स्क्रीनशॉट में मैं दो ग्राहकों है, और मुझे उन दोनों को वापस जाने के लिए की जरूरत है। जैसा कि आप देख सकते हैं, पहले क्लाइंट में प्रदान की गई अवधि (16.5.-2 9 .5) के बीच तीन खाली दिन (21.5.-23.5।) हैं और दूसरे क्लाइंट की कोई देखभाल अवधि नहीं है।
इस
SELECT * FROM client cl
WHERE cl.id NOT IN (SELECT clientId FROM caring
WHERE endDate >= CURDATE() AND endDate <= DATE_ADD(CURDATE(), INTERVAL 14 DAY))
यह एक वापसी केवल ग्राहकों बिल्कुल carings की जरूरत नहीं है कि जैसे अब तक मैं कोशिश की है कुछ। यह आंशिक रूप से मुझे चाहिए क्योंकि यह क्वेरी मेरे स्क्रीनशॉट से पहले क्लाइंट को कवर नहीं करती है। तब मैंने सवाल पूछने की कोशिश की।
SELECT ca.startDate, ca.endDate, cl.firstName, cl.lastName
FROM caring ca
LEFT JOIN client cl on cl.id = ca.clientId
WHERE ca.startDate NOT IN (
SELECT endDate
FROM caring
) AND ca.startDate <= '2017-05-29' AND ca.endDate >= '2017-05-16'
लेकिन मुझे वांछित परिणाम नहीं मिल रहे हैं।
कोई विचार यह है कि मैं इसे कैसे प्राप्त कर सकता हूं, अग्रिम में thx!
मेरे पास एक समाधान है (अंतर + समूह/योग द्वारा दिन की गिनती) जो मैं शाम को उत्तर के रूप में पोस्ट करूंगा ... – fheub
समाधान के लिए धन्यवाद ... :) – Jasko