sql >> Database >  >> RDS >> Mysql

groeperen op niet-null-waarden

Ik denk dat het volgende doet wat je wilt:

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

Het doet een voorwaardelijke group by dus de NULL source-ID's worden niet gegroepeerd. Vervolgens worden ze als laatste geplaatst met behulp van logica in order by .

Ik begreep niet wat je bedoelde met het laatste voorval. Nu denk ik van wel:

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

Dit voegt zich bij de informatie van het laatste record (gebaseerd op hoogste id).



  1. Hoe kan ik een MySQL-database opvragen vanuit een Rails-app zonder modellen?

  2. SQL-ontwikkelaar 4.1.3 vrijgegeven

  3. Hoe queryparameters in MySQL Query Browser in te stellen?

  4. Een inleiding tot TimescaleDB