Сравнить данные предыдущего столбца с данными следующего столбца - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть таблица продаж со следующими столбцами. Я хочу выбрать строки, в которых цена продажи увеличивается, и пропустить те, которые уменьшают цену продажи, в которой увеличивается цена продажи выше строки. например в следующей таблице я хотел бы иметь все строки, кроме строки, имеющей saleid=4

+--------+--------+-----------+
| SaleId | ItemId | SalePrice |
+--------+--------+-----------+
| 1      | 987    | 12        |
+--------+--------+-----------+
| 2      | 678    | 13        |
+--------+--------+-----------+
| 3      | 987    | 15        |
+--------+--------+-----------+
| 4      | 542    | 11        |
+--------+--------+-----------+
| 5      | 678    | 16        |
+--------+--------+-----------+

Я пытался использовать внутреннее соединение. Но это ничего не показывает. Вот запрос, который я написал:

select s1.* from saletable s1
join saletable s2 on s1.saleid = s2.saleid
where s1.saleprice<s2.saleprice

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Рассмотрим следующее решение, используя max

select t.*
from
(
    select *, max(SalePrice) over (order by SaleId) runningMaxSalePrice
    from testdata
) t
where t.SalePrice >= t.runningMaxSalePrice

Это решение пропускает несколько последовательных строк с уменьшением SalePrice.

DBFdiddle DEMO

0 голосов
/ 02 ноября 2018

Использование lag():

select st.*
from (select st.*, lag(saleprice) over (order by saleid ) as prev_saleprice
      from saletable st
     ) st
where prev_saleprice is null or saleprice > prev_saleprice 
...