2011-12-28 40 views
1

如何找到datetime列中最古老的值?找出从日期列中的旧日期在sql

我有日期时间列(UpdateDate)表,我需要找出最早的数据基于UpdateDate。

Id  UpdateDate     Desc 
----------------------------------------- 
1 2010-06-15 00:00:00.000  aaaaa 
2 2009-03-22 00:00:00.000  bbbbb 
3 2008-01-12 00:00:00.000  ccccc 
4 2008-02-12 00:00:00.000  ddddd 
5 2009-04-03 00:00:00.000  eeeee 
6 2010-06-12 00:00:00.000  fffff 

我必须找出使用 Select UpdateDate from Table1 where DATEDIFF(YEAR,UpdateDate,getdate()) > 0查询当前日期的旧年的日期。但我需要找出2008年的数据(因为2008年是这里最老的一个) 我不知道表中有什么,我需要找出最旧的日期值。它怎么可能?

回答

3
Select UpdateDate from Table1 where DATEDIFF(YEAR,PartDateCol,getdate()) IN 
(Select MAX(DATEDIFF(YEAR,PartDateCol,GETDATE())) DiffYear from Table1) 

此发现的最古老的日期将返回2008年的两项纪录。如果你的纪录有四项2006年的纪录如果差别很大,它将返回所有2006年的数据。

+0

雅...这是我的预期..感谢很多家伙.. :-) – Tanya 2011-12-28 07:21:29

0

如果你想要的数据,2008年一年内尝试这个办法:

Select UpdateDate From Table1 
Where Year(UpdateDate) = 
(
    Select Year(UpdateDate) 
    from Table1 Order By UpdateDate ASC Limit 1 
) ; 
+0

感谢您的回复..但我需要的是,我不知道2008年是否是最古老的。我只知道表名,它包含一些日期值,因此我需要找出最早的日期。 – Tanya 2011-12-28 07:16:43

+0

@Tanya固定,看我的编辑。 – 2011-12-28 08:13:18

0

您可以使用toporder by

select top(1) UpdateDate 
from Table1 
order by UpdateDate 

更新:

如果你想第一年现在你可以使用它代替了所有行。这样做的

select * 
from (
     select *, 
      rank() over(order by year(UpdateDate)) as rn 
     from Table1 
    ) as T 
where T.rn = 1 
0

一种方法是

Select UpdateDate from Table1 where YEAR(UpdateDate)=2008

但是,你可以通过订购数据,这样

Select * from Table1 order by UpdateDate ASC