2010-10-26 31 views
6

我們的數據庫有許多記錄具有相同的發票號碼,但具有不同的日期和不同的註釋。TSQL根據最高日期選擇截然不同

所以你可能有類似

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 

我需要選擇不同的發票號,日期和註釋。用於記錄最近的日期。

所以我的結果應該只包含

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

怎麼可能做到這一點? 謝謝!

回答

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

這也正是我需要做的事。非常感謝你! – twal 2010-10-26 17:35:10

1

嘗試:

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

我認爲你的內部查詢是錯誤的......它只會返回1行。然後整個查詢將只返回一行... – Martin 2010-10-26 17:06:07

9

使用分析功能:

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

謝謝文森特。一直在尋找這種解決方案。你讓我今天一整天都感覺很好 :) – Maverick 2012-04-11 13:40:58