Sql server 查询最小值和最大值为2个属性的数据

Sql server 查询最小值和最大值为2个属性的数据,sql-server,group-by,Sql Server,Group By,我有一个SQL Server数据表和一个表:问题 结构如下 Name Problem Date IsCurrent ----------------------------------------- John Fever 22-06-2015 1 Davis High BP 20-06-2015 0 John Headache 25-05-2105

我有一个SQL Server数据表和一个表:问题

结构如下

     Name   Problem     Date          IsCurrent
     -----------------------------------------
     John   Fever       22-06-2015        1
     Davis  High BP     20-06-2015        0
     John   Headache    25-05-2105        0
     John   Fever       20-05-2015        1
     Davis  High BP     10-05-2015        1
我想一次查询此表中的一个名称。例如,如果我询问约翰的问题

我的结果集应该是

1. Fever    20-05-2015 (Min Date of the Problem)   1 (IsCurrent status as of the latest date)
2. Headache 25-05-2015                             0
对于Davis来说,结果集是

1. High BP   10-05-2015 (Min Date of the Problem) 0 (IsCurrent status as of the latest date)
由于此处同时需要最小日期和最大日期,我最优化的查询是什么?

假设IsCurrent始终是最新的,并且每个名称一次只处理一个问题,则以下操作应该可以:

SELECT
    t.Problem
    ,t.MIN([Date])
    ,MAX(t.IsCurrent)
FROM ProblemTable t
WHERE t.Name = 'John'
GROUP BY Name, Problem
按名称和问题分组将给您留下[Date],并且当前需要聚合。您需要最短日期,以及分组问题是否当前。选择最大IsCurrent值将为您找到答案,因为值1只会针对设置为current的问题显示。

在查询中根据名称和问题列创建分组。
select Name, problem, MIN([date]) mindate,max(date) maxdate into #t1
 from ProblemTable  
group by Name, problem

select Name, problem,max(date) maxdate, iscurrent into #t2
 from ProblemTable group by Name, problem, iscurrent

select t1.Name,t1.Problem, t1.mindate, t2.IsCurrent from #t1 t1
inner join
t2 t2 on t1.Name=t2.Name and t1.Problem=t2.Problem and t1.maxdate=t2.maxdate