Многие из вас могут знать, что я заядлый гуляющий. Мне нравится гулять и ходить в походы для здоровья и психического здоровья. Я также разборчива с обувью, которую ношу на прогулках. Недавно я использовал функцию LEAD()
Window для некоторых отслеживаемых мной данных о ходьбе и обнаружил пробелы в диапазонах дат, когда я носил ту или иную марку обуви. Продолжайте читать и просмотрите примеры запросов, которые я придумал, чтобы укрепить концепции изучения LEAD()
…
Следуйте за мной здесь, на Medium, и получайте уведомление по электронной почте, когда я публикую сообщения!
Если вам нравится содержание, написанное здесь, обязательно поделитесь этим блогом и своими любимыми сообщениями с другими людьми, которым он также может быть полезен или им понравится. Поскольку кофе - мой любимый напиток, вы можете даже купить мне его, если хотите!
Я использую базу данных Oracle для запросов в этом посте. Насколько мне известно, большинство реализаций SQL поддерживают функцию LEAD()
Window. Однако обязательно проверьте соответствующую документацию для вашей версии.
В примерах запросов используются 2 таблицы. Таблица STG_WALKING_STATS и SHOES_WORN. Столбец SHOE_ID в таблице STG_WALKING_STATS является ИНОСТРАННЫМ КЛЮЧОМ для столбца SHOE_ID в таблице SHOES_WORN .
Простой INNER JOIN
возвращает общее количество строк, в которых я носил любимую пару обуви:
Проблема в том, что я знаю из первых рук, что это не последовательные дни, а на самом деле разделены двумя разными парами обуви одной марки. Я сделал перерыв в первой паре, чтобы примерить обувь разных марок. Однако в конечном итоге я вернусь к марке обуви, которая мне больше всего подходит на данный момент.
Убрав этот наполнитель, переходим к основной цели - узнать, сколько дней прошло между тем, когда я последний раз надевал первую пару обуви до перерыва ( начал пробовать другие бренды ), когда я снова начал носить эту конкретную марку.
Я обнаружил, что оконная функция LEAD()
хорошо работает для этого конкретного запроса.
Функция окна LEAD (): использование и синтаксис
Функция LEAD()
Window получает доступ к следующим строкам из текущей строки, с которой она работает. LEAD()
принимает до 3 параметров, 2 из которых являются необязательными.
LEAD(expression, offset, DEFAULT)
(Примечание: параметры смещение и по умолчанию необязательны.)
Я взял за правило писать еженедельное электронное письмо о SQL / PHP, которое я изучаю и которое меня интересует. Если это похоже на то, частью чего вы хотели бы стать, используйте эту подписку (внешняя ссылка) сформировать и подписаться. Спасибо!
Функция окна LEAD (): поиск пробелов в диапазонах значений DATE
Указав столбец DAY_WALKED в вызове LEAD()
и предложение ORDER BY
в предложении OVER()
, я могу получить доступ к следующей строке для каждой текущей строки.
В Oracle SQL вы можете вычесть 2 DATE
значений и рассчитать количество дней между ними. Как показано в этом запросе, я вычитаю значение DAY_WALKED текущих строк из значения DAY_WALKED следующих строк (возвращаемого LEAD()
) и определяю количество дней между ними.
(Примечание: в приведенных выше результатах запроса возвращено больше строк, чем показано, из-за ограничений на снимке экрана.)
Обернув запрос во встроенном VIEW
, я затем ORDER BY
выражение DAYS_DIFF в порядке убывания, возвращая те строки с наибольшим значением первыми в наборе результатов:
Основываясь на результатах запроса, между 13-м мая-20, когда я последний раз носил первую пару обуви, и 23-мАР-21, когда я снова начал носить эту марку, прошло 314 дней.
Подумайте о том, чтобы сделать пожертвование, поскольку я продолжаю размещать здесь ценный контент в своем блоге. Большое спасибо!!! Каждый бит очень ценится и очень помогает!
Функция окна LEAD (): дополнительные параметры смещения и по умолчанию
Возможно, вы заметили NULLS LAST
ключевые слова в предложении ORDER BY
для предыдущего запроса. Опуская NULLS LAST
, мы возвращаем следующие результаты запроса:
Например, возьмите строку со значением 29-JUN-21 DATE
. NULL
возвращается для выражения столбца NEXT_WALK. Это означает, что для этой даты нет строки позже, поскольку она является последней в наборе результатов. В этом случае LEAD()
возвращает NULL
, а выражение DAYS_DIFF также оценивается как NULL
.
Если нет параметров смещение или по умолчанию - для тех экземпляров, в которых смещение выходит за пределы строк таблицы - указывается в вызове LEAD()
, затем 1 используется как смещение, а NULL
- по умолчанию.
Если вы видите какие-либо ошибки или у вас есть вопросы по коду, пожалуйста, поделитесь ими в комментариях. Конструктивная обратная связь помогает мне создавать точные статьи и очень ценится!
Мне действительно нравится узнавать больше о функциях окна SQL. В большинстве проектов, над которыми я работаю (веб-разработка Back-end LAMP stack), я не встречал очень много вариантов использования любого из них. Но самостоятельное обучение через личные проекты - такие как этот пост - лучше подготовит меня к тому, когда мне действительно нужно их использовать.
Нравится то, что вы прочитали? Видите что-нибудь неправильное? Прокомментируйте, пожалуйста, ниже и спасибо за чтение !!!
Призыв к действию!
Спасибо, что нашли время прочитать этот пост. Я искренне надеюсь, что вы открыли для себя что-то интересное и поучительное. Пожалуйста, поделитесь своими выводами здесь с кем-нибудь, кого вы знаете, кто тоже получит от этого такую же ценность.
Посетите страницу Портфолио-проекты, чтобы увидеть сообщения в блоге / технические статьи, которые я написал для клиентов.
Кофе - мой любимый напиток !!!
Чтобы получать уведомления по электронной почте (Никогда не спамить) от этого блога (Проза цифровой совы) о последних публикациях в блоге по мере их публикации, пожалуйста, подпишитесь (по собственному желанию), нажав кнопку Нажмите, чтобы подписаться! На боковой панели на домашняя страница! (Не стесняйтесь в любое время просмотреть страницу политики конфиденциальности Digital Owl's Prose по любым вопросам, которые могут у вас возникнуть: обновления по электронной почте, подписка, отказ, контактные формы и т. Д.)
Обязательно посетите страницу Best Of, где собраны мои лучшие сообщения в блоге.
Джош Отвелл хочет учиться и расти как разработчик SQL и блогер. Другие любимые занятия находят его, уткнувшись носом в хорошую книгу, статью или командную строку Linux. Среди них он разделяет любовь к настольным ролевым играм, чтению фэнтезийных романов и проведению времени с женой и двумя дочерьми.
Отказ от ответственности: примеры, представленные в этом посте, представляют собой гипотетические идеи о том, как достичь аналогичных результатов. Это не самое лучшее решение. Большинство, если не все, из представленных примеров выполняются в среде рабочей станции для личного развития / обучения и не должны считаться производственными или готовыми к использованию. Ваши конкретные цели и потребности могут отличаться. Используйте те методы, которые лучше всего подходят для ваших нужд и целей. Мнения мои собственные.
Первоначально опубликовано на https://joshuaotwell.com 4 августа 2021 г.