SQL Разница между использованием двух дат - PullRequest
1 голос
/ 12 марта 2011

В моей базе данных есть таблица под названием clientordermas.Два столбца этой таблицы:

execid и fillqty.
Три записи этих двух полей следующие.

E02011 / 03 / 12-05: 57_24384: 1000
E02011 / 03 / 12-05: 57_24384: 800
E02011 / 03 / 09-05: 57_24384: 600

Что мне нужно сделать, это получить заполненную разницу между последней датой и 1 до последней даты, равной 400 (1000-400).
Я извлек дату из execid следующим образом:

(SUBSTR (execid, 3, 10)

Я так старался, но не смог написать SQL-запрос, чтобы получить 400. Может кто-нибудь, пожалуйста, помогите мне сделатьэто ???

PS Мне нужно выбрать максимальное заполненное количество с той же даты. Это не 1000, а 800.

Ответы [ 2 ]

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

Вы можете использовать оконные функции для доступа к «соседним» строкам, поэтому, если вы сначала очистите данные в подзапросе, а затем используете оконные функции для доступа к следующей строке, вы должны получить правильные результаты.Но если у вас нет индекса на substr(execid, 3, 10), это будет медленно.

WITH datevalues AS
(
  SELECT max(filledqty) maxfilledqty, substr(execid, 3, 10) execiddate
  FROM clientordermas
  GROUP BY substr(execid, 3, 10)
)
SELECT
  execiddate,
  maxfilledqty -
  last_value(maxfilledqty) over(ORDER BY execiddate DESC ROWS BETWEEN 0 PRECEDING AND 1 FOLLOWING)
FROM datevalues
ORDER BY execiddate DESC;
0 голосов
/ 12 марта 2011
WITH maxqtys AS (
SELECT substr(a.execid,3,10) AS date, MAX(a.filledqty) AS maxqty
FROM clientordermas a
GROUP BY substr(a.execid,3,10)
)
SELECT a.maxqty-b.maxqty
FROM maxqtys a, maxqtys b
WHERE a.date <> b.date AND ROWNUM=1
ORDER BY a.date DESC, b.date DESC

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

Сортируйте эти пары по убыванию даты, а верхняя строка будет содержать последнюю и последнюю дату с соответствующими количествами.

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