Jeg tror, at følgende gør, hvad du vil:
SELECT *, (To_days(date_expires)-TO_DAYS(NOW())) som dayDiff, COUNT(id) AS change_countFROM mytableGROUP BY (tilfælde, hvor source_id er null, så id else source_id end)HAVING dayDiff <4 ORDRE BY (tilfælde, hvor source_id er null, derefter 1 else 0 end), date_created DESC
Den laver en betinget gruppering efter
så NULL sourceids vil ikke blive grupperet. Det sætter dem så sidst ved hjælp af logik i rækkefølge efter
.
Jeg forstod ikke, hvad du mente med sidste hændelse. Nu tror jeg, at jeg gør:
VÆLG samles(s.id, mytable.id) som id, max(case, når s.maxid ikke er null og s.maxid =myable.id derefter mytable.name, når s.maxid er null, så NULL else mytable.name end) som navn, (To_days(date_expires)-TO_DAYS(NOW())) som dayDiff, COUNT(id) AS change_countFROM mytable left outer join (vælg source_id, MAX(id) som maxid fra mytable, hvor source_id er ikke null gruppe efter source_id ) s på mytable.id =s.maxidGROUP BY (tilfælde hvor kilde_id er null så id andet source_id end)HAVING dayDiff <4 ORDER BY (tilfælde når source_id er null derefter 1 andet 0 end), date_created DESC
Dette slutter sig til oplysningerne fra den seneste post (baseret på højeste id).