2014-07-12 200 views
0

我有一個超過150k行和大約40列的表。有很多重複,大多數行只有日期不同。我想保留具有最新日期的行(其中一些日期在未來),其中所有其他列都是相同的。 我正在使用Access數據庫。在SQL中選擇最近日期

粗略地說,表是這樣的:

Supplier code, Contract number, Incoterms, Currency, Price, First day of validity, Last day of validity 
-------------------------- 
47650   2806751M   DDA  EUR  0.01 01/03/2010    31/12/2012 
47650   2806751M   DDA  EUR  0.02 01/01/2013    31/12/2014 
47650   2806751M   DDA  EUR  0.03 01/01/2015    31/12/2016 
47650   2806751M   DDA  EUR  0.04 01/01/2017    31/12/2019 

所有這些列包含幾乎相同的數據,但合同的有效期是重要的變量,因爲它決定了價格。這就是爲什麼我想保留包含最新日期的行。

+1

請展示你的表的架構或領域。 – Edper

+0

是否有您想要的最新日期的特定列? –

+0

我已經添加了該表的模式。 – Henrik

回答

1

「所有其他列都一樣」:這轉化爲GROUP BY超過上的日期所有其他列和MAX:

select all other columns, 
    MAX(datecol) 
from tab 
group by all other columns 
+0

這個問題陳述了「最近的日期」,這可能意味着忽略未來的日期。那麼你需要'where datecol <= sysdate'。 – TommCatt

+0

@TommCatt:實際上,這只是標題上寫着「近期」,這個問題的正文使用了「最新」這個詞。這兩個詞在英語中是否同樣具有「最後之前」的內涵? –

+0

無論如何,@dnoeth,正如現在的例子所示,您可能不應該按「所有其他列」進行分組。 OP需要一個與最新日期一致的特定列(價格),因此分組必須由其他內容組成。 (我已要求OP澄清。) –