分组查询 - 任何其他方式?

时间:2011-10-10 02:13:44

标签: sql group-by

我有下表包含以下数据:

http://img513.imageshack.us/img513/9039/mycities.png

CREATE 语句,插入位于http://snipt.org/xoKl

该表是城市列表,每个城市属于一个地区和一个国家,每个城市都有一个创建日期。这里的目标是为每个“国家/地区”对获取最古老城市的列表。我们需要加拿大东海岸最古老的城市,这是美国西海岸最古老的城市,等等...

我现在使用的查询是:

SELECT * FROM MyCities
 INNER JOIN 
   (SELECT Country, Region, MIN(FoundingDate) AS CityFoundingDate
      FROM MyCities
     GROUP BY Country, Region ) AS subquery    
        ON subquery.CityFoundingDate = MyCities.FoundingDate
       AND MyCities.Country = subquery.Country
       AND MyCities.Region = subquery.Region

我只想知道是否有其他方法可以通过查询来编写此群组。 :-)
这个查询是否有效?
期待讨论。

3 个答案:

答案 0 :(得分:3)

怎么样?

select country, region, city from MyCities mc1
where foundingDate <= ALL (
    select foundingDate from MyCities as mc2
    where mc1.country = mc2.country and mc1.region = mc2.region 
)

答案 1 :(得分:1)

这样的事情怎么样? 应该在Oracle工作(虽然我现在无法测试)

SELECT country, region, city, foundingdate 
FROM (
SELECT country, region, city, foundingdate, MIN(founding_date) OVER PARTITION BY (country, region) min_date
FROM mycities) WHERE foundingdate=min_date

但如果同一年在同一个国家/地区建立了两个城市呢?

答案 2 :(得分:0)

This article讨论了解决此问题的多种方法。