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

GROUP BYのSQLクエリ、LEAST、COALESCEの条件に一致するグループを返します

    まず、tour_idを取得します 条件に一致するもの:

    SELECT Tour_ID
    FROM myTable 
    WHERE organisation LIKE 'Ikea'
    GROUP BY Tour_ID
    HAVING LEAST(COALESCE(MIN(A), '2019-01-01'), COALESCE(MIN(B), '2019-01-01'), COALESCE(MIN(C), '2019-01-01'), COALESCE(MIN(D), '2019-01-01')) >= '2018-05-01' AND
           LEAST(COALESCE(MIN(A), '2019-01-01'), COALESCE(MIN(B), '2019-01-01'), COALESCE(MIN(C), '2019-01-01'), COALESCE(MIN(D), '2019-01-01')) < '2018-06-01';
    

    次に、これをクエリに入れて、元の行を取得します。これが1つの方法です:

    select t.*
    from mytable t join
         (SELECT organisation, Tour_ID
          FROM myTable 
          WHERE organisation LIKE 'Ikea'
          GROUP BY organisation, Tour_ID
          HAVING LEAST(COALESCE(MIN(A), '2019-01-01'), COALESCE(MIN(B), '2019-01-01'), COALESCE(MIN(C), '2019-01-01'), COALESCE(MIN(D), '2019-01-01')) >= '2018-05-01' AND
                 LEAST(COALESCE(MIN(A), '2019-01-01'), COALESCE(MIN(B), '2019-01-01'), COALESCE(MIN(C), '2019-01-01'), COALESCE(MIN(D), '2019-01-01')) < '2018-06-01'
         ) tt
         ON tt.tour_id = t.tour_id AND
            tt.organisation = t.organisation;
    



    1. SQLPlus-PL/SQLブロックから複数のファイルへのスプーリング

    2. 非効率的なSQLクエリ

    3. 列のデータが切り捨てられましたか?

    4. シェルスクリプトでデータベースを作成する-PHPから変換する