Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách nhận NGÀY TỐI ĐA thứ hai trong MYSQL

Thật không vui khi đọc truy vấn của bạn, nhưng tôi nghĩ vấn đề nằm ở đây:

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
)

nếu bạn muốn ngày tối đa cho mọi khách hàng, bạn cần NHÓM THEO client_id:

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

nếu bạn muốn mức tối đa thứ hai thì có ít tùy chọn, tôi đang sử dụng tùy chọn này dễ hiểu hơn nhưng nó không nhất thiết phải là hiệu suất cao nhất:

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

vấn đề thứ ba, bạn đang sử dụng LEFT JOIN có nghĩa là bạn sẽ trả về tất cả các giá trị từ og_ratings bất kể chúng có phải là giá trị tối đa thứ hai hay không. Sử dụng INNER JOIN trong ngữ cảnh này:

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. Kiểm tra thời gian phản hồi trên thư đã gửi - có thể chỉ sử dụng SQL?

  2. Cách tốt nhất để CHÈN nhiều giá trị trong mysqli?

  3. Có cách nào trong MySQL để tạo ngầm một khóa chính cho một bảng không?

  4. Ngày giờ bằng hoặc lớn hơn ngày hôm nay trong MySQL

  5. Sự cố hết thời gian chờ kết nối MySQL - Ứng dụng Grails trên Tomcat sử dụng Hibernate và ORM