sql >> Database teknologi >  >> RDS >> Mysql

grupper efter ikke-nul-værdier

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).



  1. Ikke i stand til at godkende min Node js(v10.15.3) app, npm mysql (v2.17.1) med MySQL(8.0.15) (ER_ACCESS_DENIED_ERROR)

  2. Sådan gør du:Rens en mysql InnoDB-lagringsmotor?

  3. ALDER [1, 2, 3] vs. ALDER MELLEM 1 OG 3

  4. Find ud af, om værdien er nummer i MySQL