आपकी क्वेरी को पढ़कर मज़ा नहीं आया, लेकिन मुझे लगता है कि समस्या यहाँ है:
LEFT JOIN (
SELECT max(notification_date) notification_date, client_id
FROM og_ratings
WHERE notification_date NOT IN (
SELECT max(notification_date)
FROM og_ratings
)
यदि आप प्रत्येक क्लाइंट के लिए अधिकतम तिथि चाहते हैं तो आपको क्लाइंट_आईडी के अनुसार ग्रुप करना होगा:
SELECT client_id, max(notification_date) notification_date
FROM og_ratings
GROUP BY client_id
यदि आप दूसरा अधिकतम चाहते हैं तो कुछ विकल्प हैं, मैं इसका उपयोग कर रहा हूं जो समझने में आसान है लेकिन यह सबसे अधिक प्रदर्शन करने वाला नहीं है:
SELECT client_id, max(notification_date) notification_date
FROM og_ratings
WHERE
(client_id, notification_date) NOT IN (
SELECT client_id, max(notification_date)
FROM og_ratings GROUP BY client_id
)
GROUP BY client_id
तीसरी समस्या, आप लेफ्ट जॉइन का उपयोग कर रहे हैं जिसका अर्थ है कि आप og_ratings से सभी मान वापस कर देंगे, भले ही वे दूसरे अधिकतम हों या नहीं। इस संदर्भ में INNER JOIN का उपयोग करें:
SELECT
r.client_id,
c.id,
t.id,
..etc...
FROM
og_ratings r INNER JOIN (
SELECT client_id, max(notification_date) notification_2nd_date
FROM og_ratings
WHERE
(client_id, notification_date) NOT IN (
SELECT client_id, max(notification_date)
FROM og_ratings GROUP BY client_id
)
GROUP BY client_id
) r2
ON r.notification_date = r2.notification_2nd_date
AND r.client_id = r2.client_id
LEFT JOIN og_companies c ON r.client_id = c.id
LEFT JOIN og_rating_types t ON r.rating_type_id = t.id
LEFT JOIN og_actions a ON r.pacra_action = a.id
LEFT JOIN og_outlooks o ON r.pacra_outlook = o.id
LEFT JOIN og_lterms l ON r.pacra_lterm = l.id
LEFT JOIN og_sterms s ON r.pacra_sterm = s.id
LEFT JOIN pacra_client_opinion_relations pr ON pr.opinion_id = c.id
LEFT JOIN pacra_clients pc ON pc.id = pr.client_id
LEFT JOIN city ON city.id = pc.head_office_id
WHERE
r.client_id IN (
SELECT opinion_id FROM pacra_client_opinion_relations
WHERE client_id = 50
)