Кто-нибудь может помочь мне понять этот код SQL?

#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. Привет! Большое вам спасибо. Это действительно полезно