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

Cara mendapatkan TANGGAL MAKSIMUM kedua di MYSQL

Tidak menyenangkan membaca kueri Anda, tetapi menurut saya masalahnya ada di sini:

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
)

jika Anda ingin tanggal maksimum untuk setiap klien, Anda perlu GROUP BY client_id:

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

jika Anda ingin maksimum kedua ada beberapa opsi, saya menggunakan yang ini yang lebih mudah dipahami tetapi belum tentu yang paling berkinerja:

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

masalah ketiga, Anda menggunakan LEFT JOIN yang berarti Anda akan mengembalikan semua nilai dari og_ratings terlepas dari apakah itu maksimum kedua atau tidak. Gunakan INNER JOIN pada konteks ini:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Golang, mysql:Kesalahan 1040:Terlalu banyak koneksi

  2. Bagaimana mencegah kondisi balapan dalam pemesanan hotel online

  3. Pilih nilai dari daftar yang tidak ada dalam tabel

  4. Saldo Debit Kredit Saldo Terbuka MySQL

  5. Laravel:Cara mendapatkan koleksi fasih yang diurutkan khusus menggunakan metode whereIn