Многие из вас могут знать, что я заядлый гуляющий. Мне нравится гулять и ходить в походы для здоровья и психического здоровья. Я также разборчива с обувью, которую ношу на прогулках. Недавно я использовал функцию 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 г.