Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

kelompokkan berdasarkan nilai bukan nol

Saya pikir berikut ini melakukan apa yang Anda inginkan:

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

Itu melakukan group by bersyarat jadi sourceid NULL tidak akan dikelompokkan. Kemudian menempatkan mereka terakhir menggunakan logika di order by .

Saya tidak mengerti apa yang Anda maksud dengan kejadian terakhir. Sekarang saya pikir saya melakukannya:

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

Ini menggabungkan informasi dari catatan terbaru (berdasarkan id tertinggi).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. FOREIGN KEY mereferensikan kolom tabel yang sama. Tidak dapat memasukkan nilai

  2. mencocokkan seluruh kata sambil mengabaikan imbuhan kata menggunakan regex

  3. Panjang maksimum nama tabel di MySQL

  4. SQL - JIKA ADA UPDATE ELSE INSERT Syntax Error

  5. SQLAlchemy:Buat kueri penghapusan menggunakan self-join di MySQL