使用SQL从表中查找指定记录的最早和最晚日期

时间:2010-03-25 09:10:33

标签: sql sql-server sql-server-2005

我有一个表(在MS SQL 2005中),其中包含一系列日期。我希望能够应用WHERE语句返回一组它们,然后返回哪一个日期是最早的一列,哪一个是另一列的最新日期。这是一个示例表:

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 = 01/03/2010(来自记录ID 1)和(最新)EndDate = 08/03/2010(来自记录ID 3)。

提前致谢

2 个答案:

答案 0 :(得分:9)

您需要minmax汇总功能,例如一个非常简单的案例:

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

您拥有SQL的所有常用功能,因此可以从子查询中进行选择。

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