2015-07-10 55 views
0

我有一个表中的SQL Server数据表与闵数据和Max:​​查询的2个属性

这里是结构

 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名时间。对于例如如果我查询ProblemJohn

我的结果集应该是

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 DateMax Date这里是必需的,哪些将是我最优化的查询?

+0

在查询中通过名称和问题列进行分组。 –

回答

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 
+0

谢谢Karthiga ... – user2561997

0

假设IsCurrent始终是最新的,并且在一段时间每名一个问题只1,下面应该工作:

SELECT 
    t.Problem 
    ,t.MIN([Date]) 
    ,MAX(t.IsCurrent) 
FROM ProblemTable t 
WHERE t.Name = 'John' 
GROUP BY Name, Problem 

分组由NameProblem你会留下[Date]IsCurrent需要聚集。你想要的最短日期,以及是否分组问题IsCurrent。选择最大的IsCurrent值会发现对您而言,因为值1只会出现在设置为当前的问题中。