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

MYSQLで2番目の最大日付を取得する方法

    クエリを読むのは面白くありませんでしたが、問題はここにあると思います:

    LEFT JOIN (
      SELECT max(notification_date) notification_date, client_id
      FROM og_ratings
      WHERE notification_date NOT IN (
        SELECT max(notification_date)
        FROM og_ratings
    )
    

    すべてのクライアントの最大日付が必要な場合は、client_idでGROUPBYする必要があります:

    SELECT client_id, max(notification_date) notification_date
    FROM og_ratings
    GROUP BY client_id
    

    2番目の最大値が必要な場合は、いくつかのオプションがあります。私はこれを使用しています。これは理解しやすいものですが、必ずしも最もパフォーマンスが高いとは限りません。

    SELECT client_id, max(notification_date) notification_date
    FROM og_ratings
    WHERE
      (client_id, notification_date) NOT IN (
        SELECT client_id, max(notification_date)
        FROM og_ratings GROUP BY client_id
      )
    GROUP BY client_id
    

    3番目の問題は、LEFT JOINを使用していることです。これは、2番目に大きいかどうかに関係なく、og_ratingsからすべての値を返すことを意味します。このコンテキストでINNERJOINを使用します:

    SELECT
      r.client_id,
      c.id,
      t.id,
      ..etc...
    FROM
      og_ratings r INNER JOIN (
        SELECT client_id, max(notification_date) notification_2nd_date
        FROM og_ratings
        WHERE
          (client_id, notification_date) NOT IN (
            SELECT client_id, max(notification_date)
            FROM og_ratings GROUP BY client_id
          )
        GROUP BY client_id
       ) r2
      ON r.notification_date = r2.notification_2nd_date
         AND r.client_id = r2.client_id
      LEFT JOIN og_companies c ON r.client_id = c.id
      LEFT JOIN og_rating_types t ON r.rating_type_id = t.id
      LEFT JOIN og_actions a ON r.pacra_action = a.id
      LEFT JOIN og_outlooks o ON r.pacra_outlook = o.id
      LEFT JOIN og_lterms l ON r.pacra_lterm = l.id
      LEFT JOIN og_sterms s ON r.pacra_sterm = s.id
      LEFT JOIN pacra_client_opinion_relations pr ON pr.opinion_id = c.id
      LEFT JOIN pacra_clients pc ON pc.id = pr.client_id
      LEFT JOIN city ON city.id = pc.head_office_id
    WHERE
      r.client_id IN (
        SELECT opinion_id FROM pacra_client_opinion_relations
        WHERE client_id = 50
      )
    


    1. MySQL LIKE + php sprintf

    2. MySQL5.6をUbuntu20.04にインストールします

    3. MySQLWorkbenchを使用してクエリの結果をエクスポートする方法

    4. テーブルに2つの外部キーを含めることはできますか?