我有下表包含以下数据:
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
我只想知道是否有其他方法可以通过查询来编写此群组。 :-)
这个查询是否有效?
期待讨论。
答案 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讨论了解决此问题的多种方法。