Sco*_*t K 5 sql group-by sql-server-2000 coalesce max
我有一个表格,其数据类似于以下内容:
我在这方面工作的时间越长,我的SQL就会变得更加丑陋,这告诉我,我可能做错了什么.我想要的是每个国家的唯一清单,只要该国的foo总是相同的(如果foo对于该州的所有记录都不相同,我根本不想要那个国家).此外,我想要COALESCE DateCreated和DateUpdated,并希望该状态的最大值.
所以给出这样的数据:
[ID], [State], [foo], [DateCreated], [DateUpdated]
1, MA, data1, 05/29/2012, 06/02/2012
2, MA, data1, 05/29/2012, 06/03/2012
3, RI, data2, 05/29/2012, NULL
4, RI, data3, 05/29/2012, NULL
5, NH, data4, 05/29/2012, NULL
6, NH, data4, 05/29/2012, 06/05/2012
Run Code Online (Sandbox Code Playgroud)
我只想要这些结果:
[State], [foo], [LastUpdated]
MA, data1, 06/03/2012
NH, data4, 06/05/2012
Run Code Online (Sandbox Code Playgroud)
得到我所追求的最优雅的方法是什么?
另一个:
http://sqlfiddle.com/#!6/fd219/1
SELECT
t.State,
MAX(t.foo),
MAX( COALESCE( t.DateUpdated, t.DateCreated ))
FROM t
GROUP BY t.State
HAVING COUNT(DISTINCT t.foo) = 1;
Run Code Online (Sandbox Code Playgroud)
使用嵌套查询的简单Group by就足够了:
Select State, coalesce(max_created,max_updated) from (
Select State, min(foo) as min_foo, max(foo) as max_foo,
max(DateCreated) as max_created,
max(DateUpdated) as max_updated
From Data
Group by State)
Where min_foo = max_foo
Run Code Online (Sandbox Code Playgroud)