Mysql
 sql >> база данни >  >> RDS >> Mysql

групирайте по стойности, които не са нулеви

Мисля, че следното прави това, което искате:

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

Това се присъединява към информацията от последния запис (въз основа на най-високия идентификатор).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да получите стойности от MySQL(5.6) колона, ако тя съдържа json документ като низ

  2. Вмъкване в база данни (mysql) с помощта на Ajax и PHP

  3. Как да конвертирате epoch в mySQL timestamp в JAVA

  4. MySQL MariaDB – Заявка с помощта на Temp Table

  5. Как да използвате динамично множество бази данни за един модел в CakePHP