Получить последнюю дату обновления и соответствующую информацию - PullRequest
0 голосов
/ 22 марта 2011

У меня проблема с этим запросом. Надеюсь, что кто-то может помочь

Ниже приведена таблица Country Rates

 ID     Country   Date        Rate 
 ----------------------------------     
 1.    CANADA  03/02/2009    0.78
 2.    UK      12/07/2009    1.23
 3.    UK      03/02/2010    0.12
 4.    USA     05/11/2010    1.63
 5.    CANADA  03/02/2010    0.52
 6.    USA     05/02/2011    0.98

Я хочу получить самую последнюю дату и связанную с ней оценку

Результаты должны быть такими:

Country   Date        Rate 
---------------------------    
UK      03/02/2010    0.12
CANADA  03/02/2010    0.52
USA     05/02/2011    0.98

Так что я хочу SQK для получения этих результатов

Thanx

Ответы [ 2 ]

1 голос
/ 22 марта 2011

Malikaa-

Предполагается, что ваша таблица структурирована следующим образом:

CREATE TABLE RATES
(
  COUNTRY  VARCHAR2(10),
  DT       DATE,
  RATE     NUMBER
)

тогда вы можете запустить это, чтобы получить ответ:

SELECT O.COUNTRY, O.RATE, O.DT
FROM RATES O JOIN
(
    SELECT COUNTRY, MAX(DT) DT
    FROM RATES
    GROUP BY COUNTRY) I
ON O.COUNTRY = I.COUNTRY
AND O.DT = I.DT

Надеюсь, это поможет.

-CJ

0 голосов
/ 24 марта 2011

Вот два альтернативных способа сделать это. Первый немного аккуратнее, а второй чуть быстрее, оба также идут с бонусом колонок в нужном вам порядке;)

WITH latest_dates
    AS (SELECT country, max(dt) AS dt FROM rates GROUP BY country)
SELECT l.country, l.dt, r.rate FROM latest_dates l
LEFT JOIN rates r ON l.country=r.country AND l.dt = r.dt;

или

SELECT r.country, r.dt, r.rate
FROM rates r
LEFT OUTER JOIN rates l ON l.country = r.country AND l.dt > r.dt
WHERE l.dt IS NULL;

Вы должны заметить, что все три (эти два и код CJ) вернут слишком много строк, если для страны в один и тот же день более одной ставки, но работают для набора данных, который вы даете.

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