Как сравнить значения для последней и второй последней записи в таблице? - PullRequest
5 голосов
/ 15 января 2010

У меня есть таблица в Oracle, которая называется кавычки с двумя столбцами: дата и значение .

Я хотел бы сравнить значения для последней записи и второй последней записи в таблице.

В этом примере я хотел бы получить даты для 13.1 и 11.1 в одну строку и разницу между значениями для каждой даты (10-5 = 5).


Таблица котировок:

Дата - Значение

13.1.2010 - 10

11.1.2010 - 5

10.1.2010 - 2

8.10.2010 - 1


Edit:

Я хотел бы иметь более сложную таблицу с еще одним столбцом companyId . Мне нужно получить предметы для каждой компании. Таблица будет выглядеть так:

Таблица котировок:

Дата - Значение - CompanyId

13.1.2010 - 10 - 10

11.1.2010 - 5 - 10

10.1.2010 - 2 - 10

8.10.2010 - 1 - 10

12.1.2010 - 7 - 20

10.1.2010 - 3 - 20

9.1.2010 - 2 - 20

8.10.2010 - 2 - 20

Я хотел бы получить две строки в этом случае (, но в целом просто получить столько строк, сколько число компаний составляет ) - по одной для каждой компании, которая будет возвращать как даты, так и разницу между новейшими значениями. и второе новейшее значение. Так что в этом случае он вернется:

companyId 10 13.1 и 11.1 и 5 и еще одна строка, подобная этой:

companyId 20 12,1 и 10,1 и 4 (7-3 = 4).

1 Ответ

3 голосов
/ 15 января 2010
SELECT  *, value - nextvalue AS diff
FROM    (
        SELECT  m.*, LEAD(value) OVER (ORDER BY date DESC) AS nextvalue
        FROM    mytable m
        ORDER BY
                date DESC
        )
WHERE   rownum = 1

Обновление:

Чтобы выбрать результаты по компании:

SELECT  value - nextvalue AS diff
FROM    (
        SELECT  m.*,
                LEAD(value) OVER (PARTITION BY companyId ORDER BY date DESC) AS nextvalue,
                ROW_NUMBER() OVER (PARTITION BY companyId ORDER BY date DESC) AS rn
        FROM    mytable m
        )
WHERE   rn = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...