2010-03-25 199 views
3

我有一个包含日期选择的表(在MS SQL 2005中)。我希望能够应用WHERE语句来返回其中的一组,然后返回哪一个日期最早来自一列,哪一个来自另一列最近。下面是一个示例表格:使用SQL从表中查找指定记录的最早和最后日期

ID StartDate EndDate Person 
1 01/03/2010 03/03/2010 Paul 
2 12/05/2010 22/05/2010 Steve 
3 04/03/2101 08/03/2010 Paul 

所以我想返回Person ='Paul'的所有记录。但是返回(最早)StartDate = 2010年1月1日(来自记录ID 1)和(最新)EndDate = 08/03/2010(来自记录ID 3)。

在此先感谢

+0

你可能希望在检查中确定您的开始日期不能在结束日期之后。 (第3行) – Whakkee 2010-03-25 09:21:23

+0

不用担心,这是一个错字,验证是在数据录入时完成的。谢谢。 – tonyyeb 2010-03-31 10:13:42

回答

8

您需要minmax聚合函数,例如一个非常简单的例子:

select min(StartDate), max(EndDate) 
from data 
where Person = 'Paul' 

你有SQL的所有常见的电源,所以选择从一个子查询可用。

+0

谢谢Richard,现在很明显! – tonyyeb 2010-03-25 09:27:42

2

也可以使用group by。所以,如果您想在结果所有的人,和你离开了WHERE子句,你不会得到错误的数据:

select person, min(StartDate), max(EndDate) 
from data 
group by person 

select person, min(StartDate), max(EndDate) 
from data 
where person ='Paul' 
group by person 

select person, min(StartDate), max(EndDate) 
from data 
group by person 
having person ='Paul'