我有一个带有表格的SQL Server数据表:Problems
这是结构
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个名称。对于例如如果我使用Problem
查询John
。
我的结果集应该是
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)
由于此处需要Min Date
和Max Date
,我最优化的查询是什么?
答案 0 :(得分:0)
假设IsCurrent
始终是最新的,并且每个名称一次只有1
,则以下内容应该有效:
SELECT
t.Problem
,t.MIN([Date])
,MAX(t.IsCurrent)
FROM ProblemTable t
WHERE t.Name = 'John'
GROUP BY Name, Problem
按Name
和Problem
进行分组会让您[Date]
和IsCurrent
需要汇总。您想要最小日期,以及分组问题IsCurrent。选择最大IsCurrent
值将为您找到该值,因为值1
仅针对设置为当前的问题显示。
答案 1 :(得分:0)
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