2010-10-26 28 views
6

Cơ sở dữ liệu của chúng tôi có nhiều bản ghi có cùng số hóa đơn, nhưng có ngày và ghi chú khác nhau.TSQL chọn riêng biệt dựa trên ngày cao nhất

vì vậy bạn có thể có một cái gì đó giống như

invoice date   notes 
3622  1/3/2010  some notes 
3622  9/12/2010 some different notes 
3622  9/29/1010 Some more notes 
4212  9/1/2009  notes 
4212  10/10/2010 different notes 

tôi cần phải chọn hóa đơn riêng biệt số, ngày tháng và ghi chú. cho bản ghi với ngày gần đây nhất.

nên kết quả của tôi nên chỉ chứa

3622  9/29/1010 Some more notes 
4212  10/10/2010 different notes 

thế nào là nó có thể làm điều này? Cảm ơn!

Trả lời

9
select invoice, date, notes 
from table 
inner join (select invoice, max(date) as date from table group by invoice) as max_date_table  
    on table.invoice = max_date_table.invoice and table.date = max_date_table.date 
+0

này đã làm chính xác những gì tôi cần nó để làm. Cảm ơn nhiều! – twal

1

Hãy thử:

SELECT I.* 
FROM MyInvoice AS I 
INNER JOIN 
      (SELECT Invoice, MAX([Date]) AS MaxDate 
      FROM MyInvoice 
      GROUP BY Invoice 
      ) AS M ON I.Date = M.MaxDate 
       AND I.Invoice = M.Invoice 
+0

Tôi nghĩ rằng truy vấn bên trong của bạn là sai ... nó sẽ chỉ trả về 1 hàng. Sau đó, toàn bộ truy vấn sẽ chỉ trả lại một hàng ... – Martin

9

Sử dụng chức năng phân tích:

WITH TT AS (
    SELECT invoice, date, notes, RANK() OVER(PARTITION BY invoice ORDER BY date DESC) AS R 
    FROM table 
) 
SELECT invoice, date, notes 
FROM TT 
WHERE R = 1; 
+1

Cảm ơn Vincent. Đã được tìm kiếm giải pháp này cả ngày dài. Bạn đã làm ngày của tôi :) – Maverick

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