2014-07-12 51 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澄清。) –