#mysql #sql
#mysql #sql
Вопрос:
Я новичок в SQL, но знаком с Python. Я пытаюсь импортировать этот код в Python, но я хочу понять, какие данные он захватывает в первую очередь…
Кто-нибудь может объяснить мне, что делает этот запрос? Особенно ЗАДЕРЖКА, ПРЕВЫШЕНИЕ и РАЗДЕЛЕНИЕ ПО функциям? Большое вам спасибо!
SELECT y.id, y.obs_date, y.imp_vol, LAG (obs_date,1)
over (Partition by id ORDER BY y.obs_date asc) as prev_obs_date, LAG (y.imp_vol,1)
over (partition by id ORDER BY y.obs_date asc) as prev_imp_vol,imp_vol - LAG (y.imp_vol,1)
over (partition by id ORDER BY y.obs_date asc) as absolute_change
FROM DMX.MDS_RS_OBS_EQUITY_VOL y
WHERE y.obs_date > sysdate - 15
ORDER BY id desc, obs_date desc
Комментарии:
1. В случае, если это поможет вам найти ответ самостоятельно, название этого синтаксиса — «оконные функции»
2. Хорошо, большое вам спасибо!!
3. Лаг находит значение столбца в предыдущей записи ( ` , 1 ` ), удостоверяясь, что эта запись имеет то же
id
, что и текущая запись, и упорядочивает записи в каждой группеid
поobs_date
, чтобы он знал, что означает предыдущий ..
Ответ №1:
ЗАДЕРЖКА используется для извлечения предыдущего значения. Часть OVER определяет окно (думайте об этом как о подтаблице вашей основной таблицы). Когда вы говорите о предыдущем значении, вы не хотите сравнивать несколько идентификаторов, поэтому вы РАЗДЕЛЯЕТЕ по идентификатору. Таким образом, каждая «подтаблица» содержит один идентификатор.
Когда вы говорите о предыдущем значении, порядок также важен, и это то, что решает ORDER BY . Вы упорядочиваете каждую «подтаблицу», содержащую один идентификатор, по obs_date .
То, что делает запрос, объясняется псевдонимами столбцов.
- prev_obs_date — предыдущая obs_date (для current_id)
- prev_imp_vol — предыдущий imp_vol (для current_id)
- absolute_change — разница между текущим imp_vol и предыдущим imp_vol
1 в LAG(x,1)
указывает, что это предыдущее значение на расстоянии 1. Если у вас есть таблица, содержащая 1,2,3,4,5, это то, что возвращали бы различные атрибуты lag
id LAG(id,1) LAG(id,2) LAG(id,3)
1 NULL NULL NULL
2 1 NULL NULL
3 2 1 NULL
4 3 2 1
5 4 3 2
Комментарии:
1. Привет! Большое вам спасибо. Это действительно полезно