从sql中的日期列中找出旧日期

时间:2011-12-28 07:06:36

标签: sql sql-server-2008 sql-server-2005 tsql

如何从datetime列中找到最旧的值?

我有一个带有datetime列(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年是最古老的数据) 我不知道表中有什么我需要找出最早的日期值。它怎么可能?

4 个答案:

答案 0 :(得分:3)

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

这将返回2008年的两条记录。如果您的记录有2006年的日期,那么如果差异很大,则返回所有2006年的数据。

答案 1 :(得分:0)

如果您想要2008年内的数据,请尝试以下方法:

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

答案 2 :(得分: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

答案 3 :(得分:0)

这样做的一种方法是

Select UpdateDate from Table1 where YEAR(UpdateDate )=2008

但是,您可以通过订购数据来找出最早的日期

Select * from Table1 order by UpdateDate ASC