Sql server 查询最小值和最大值为2个属性的数据
我有一个SQL Server数据表和一个表:问题 结构如下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
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