मुझे लगता है कि निम्नलिखित वही करता है जो आप चाहते हैं:
SELECT *, (To_days(date_expires)-TO_DAYS(NOW())) as dayDiff, COUNT(id) AS change_count
FROM mytable
GROUP BY (case when source_id is null then id else source_id end)
HAVING dayDiff < 4
ORDER BY (case when source_id is null then 1 else 0 end), date_created DESC
यह एक सशर्त group by
. करता है इसलिए NULL स्रोत को समूहीकृत नहीं किया जाएगा। इसके बाद यह उन्हें order by
. में तर्क का उपयोग करते हुए अंतिम स्थान पर रखता है ।
मुझे समझ में नहीं आया कि पिछली घटना से आपका क्या मतलब था। अब मुझे लगता है कि मैं करता हूं:
SELECT coalesce(s.id, mytable.id) as id,
max(case when s.maxid is not null and s.maxid = myable.id then mytable.name
when s.maxid is null then NULL
else mytable.name
end) as name,
(To_days(date_expires)-TO_DAYS(NOW())) as dayDiff, COUNT(id) AS change_count
FROM mytable left outer join
(select source_id, MAX(id) as maxid
from mytable
where source_id is not null
group by source_id
) s
on mytable.id = s.maxid
GROUP BY (case when source_id is null then id else source_id end)
HAVING dayDiff < 4
ORDER BY (case when source_id is null then 1 else 0 end), date_created DESC
यह नवीनतम रिकॉर्ड (उच्चतम आईडी के आधार पर) से जानकारी में शामिल होता है।