我有一张表,其数据类似于以下内容:

[ID],[状态],[foo],[DateCreated],[DateUpdated]

我从事此工作的时间越长,我的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 

我只想要这些结果:
[State], [foo], [LastUpdated] 
MA, data1,  06/03/2012 
NH, data4,  06/05/2012 

得到我所追求的东西的最优雅的方法是什么?

请您参考如下方法:

一个带有嵌套查询的简单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 


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!