2012-09-06 41 views
10

Tôi có truy vấn cần bản ghi gần đây nhất từ ​​bảng phụ được gọi là tbl_emails_sent.truy vấn con mysql bên trong LEFT JOIN

Bảng đó giữ tất cả email được gửi cho khách hàng. Và hầu hết khách hàng có vài đến hàng trăm email được ghi lại. Tôi muốn kéo truy vấn hiển thị gần đây nhất.

Ví dụ:

SELECT c.name, c.email, e.datesent 
FROM `tbl_customers` c 
LEFT JOIN `tbl_emails_sent` e ON c.customerid = e.customerid 

Tôi đoán một LEFT JOIN với một subquery sẽ được sử dụng, nhưng tôi không đi sâu vào các truy vấn con nhiều. Tôi có đi đúng hướng không?

Hiện tại, truy vấn ở trên không được tối ưu hóa để chỉ định bản ghi gần đây nhất trong bảng, vì vậy tôi cần một chút trợ giúp.

Trả lời

19

Nó phải là như thế này, bạn cần phải có một truy vấn riêng biệt để có được ngày tối đa (hoặc ngày mới nhất) mà email đã được gửi.

SELECT a.*, b.* 
FROM tbl_customers a 
      INNER JOIN tbl_emails_sent b 
       ON a.customerid = b.customerid 
      INNER JOIN 
      (
       SELECT  customerid, MAX(datesent) maxSent 
       FROM  tbl_emails_sent 
       GROUP BY customerid 
      ) c ON c.customerid = b.customerid AND 
        c.maxSent = b.datesent 
1

Điều này có hiệu quả không?

SELECT t1.datesent,t1.customerid,t2.email,t2.name 
FROM 
(SELECT max(datesent) AS datesent,customerid 
FROM `tbl_emails_sent` 
) as t1 
INNER JOIN `tbl_customers` as t2 
ON t1.customerid=t2.customerid 

Chỉ vấn đề bạn có sau đó là nếu hai ngày tháng giống nhau, yếu tố quyết định chọn cái nào?

Các vấn đề liên quan