2015-07-10 70 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只會出現在設置爲當前的問題中。