Intereting Posts
Строка в timestamp в mysql SQL SELECT, чтобы получить первые N положительных целых чисел Использование «Обновить для локальной переменной» для вычисления групповых итоговых итогов Как подключиться к третьей таблице в моей инструкции SQL, которая возвращает COUNT, не теряя 0 счетчиков? SQLite: как ограничить количество строк на основе метки времени? Динамические параметры SQL с помощью Anorm и Scala Play Framework Мне нужно выполнить поиск по шаблону, используя% на обоих концах, как я могу повысить производительность? Количество отсчетов не нулевых полей внутри строки Создание двух столбцов из строк таблицы Проблемы с MONTHNAME () в MySQL 5 Формат каталога исходного текста смешанного языка Показывать только часы в MYSQL DATEDIFF SQL / mysql – выберите отдельный / UNIQUE, но верните все столбцы? Консоль MySQL замедляет импорт огромных файлов SQL MySQL – проверьте, существует ли таблица без использования «select from»

Как сравнить значения для последней и второй последней записи в таблице?

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

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

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


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

Дата – значение

13.1.2010 – 10

11.1.2010 – 5

10.1.2010 – 2

8.10.2010 – 1


Редактировать:

Я хотел бы иметь более сложную таблицу с еще одним столбцом 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).

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