使用最小和最多2个属性查询数据

时间:2015-07-10 09:15:22

标签: sql-server group-by

我有一个带有表格的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 DateMax Date,我最优化的查询是什么?

2 个答案:

答案 0 :(得分: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仅针对设置为当前的问题显示。

答案 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