sql >> データベース >  >> RDS >> Mysql

null以外の値でグループ化

    私は次のことがあなたが望むことをするだろうと思います:

    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のソースIDはグループ化されません。次に、ロジックを使用して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
    

    これにより、最新のレコードからの情報が結合されます(最高のIDに基づく)。



    1. MySQL左結合、3つのテーブルで重複する列を削除する

    2. MySQLでNULL値を使用して一意の制約を実行する方法

    3. PHPのSQL挿入の試行とキャッチ

    4. SQL Serverで1時間ごとにストアドプロシージャを実行するにはどうすればよいですか?