Ошибка в запросе SQL с функцией оконного лага - PullRequest
0 голосов
/ 03 марта 2020

Я работаю над проблемой на Leetcode о SQL. Проблема дает таблицу с именем Weather, с записями для Id (например, идентификатор измерения температуры), Temperature и RecordDate. Каждый Id приходит с последующего дня. Они просят Id с, где температура в тот день превышала температуру предыдущего дня.

Моя попытка была

select id
    from
        (select id, temperature, lag(temperature, 1) over (ORDER BY RecordDate) prevs
            from weather)
    where temperature > prevs  

, но она говорит мне, что синтаксическая ошибка около (ORDER BY... part.

Что не так?

1 Ответ

1 голос
/ 03 марта 2020

Ваш запрос синтаксически неверен:

Во-первых, если вы используете LAG() с параметром позиции, то вы должны указать и третий параметр. Однако по умолчанию оно равно 1. Итак, не нужно указывать:

LAG(temperature) over (ORDER BY RecordDate) AS prevs_temp

Во-вторых, ваш подзапрос не имеет псевдонима:

select t.id
from (select id, temperature, LAG(temperature) over (ORDER BY RecordDate) AS prevs_temp
      from weather
     ) t -- alias missing 
where (t.temperature > t.prevs_temp or t.prevs_temp is null); -- will return id which doesn't have previous `temperature`.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...