Группировать по запросу - любым другим способом? - PullRequest
2 голосов
/ 10 октября 2011

У меня есть следующая таблица, которая содержит следующие данные:

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 ]

3 голосов
/ 10 октября 2011

А как же?

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 голос
/ 10 октября 2011

Как насчет этого? Должно работать в 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

Но что, если в одной стране / регионе основаны два города одного и того же года?

0 голосов
/ 10 октября 2011

В этой статье обсуждается несколько способов решения этой проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...