У меня есть две таблицы в базе данных Azure Data Explorer: первая таблица — «Пользователи», а вторая — Heartbeat. Таблица пользователей имеет определенные поля, включая адрес электронной почты. В таблице Heartbeat есть адрес электронной почты и столбец даты и времени отправки Heartbeat.
Мне нужно выбрать всех пользователей, которые НЕ отправляют пульс в определенном временном диапазоне.
Я использую следующий запрос, но он не возвращает записи.
Users
| join kind=leftouter Heartbeat on $left.userEmail == $right.userEmail
| where userEmail1 !has (userEmail)
| where HeartBeatDate between (datetime('2024-07-14 16:04:10')..datetime('2024-07-15 16:04:10'))
| distinct userLoginName,userEmail,userFullName,userPicture,userCreateDate,userPhoneNumber
Если я удалю предложениеwhere из диапазона даты/времени, я получу данные, но мне нужно будет фильтровать и искать только между заданным диапазоном времени.
Спасибо.
Чтобы получить данные пользователя, который не отправил данные о своем пульсе в указанном часовом поясе, вы можете изменить свой код, как показано ниже:
Heartbeat
| where HeartBeatDate between (datetime('2024-07-14 16:04:10')..datetime('2024-07-15 16:04:10')) //give the timezone here
| distinct userEmail
| join kind=rightouter (Users) on $left.userEmail == $right.userEmail
| where isempty(userEmail)
| project-away userEmail
Этот запрос сначала фильтрует таблицу Heartbeat
, чтобы включить только те строки, в которых HeartBeatDate
находится в пределах указанного диапазона. Затем он выбирает отдельные значения userEmail
из таблицы Heartbeat
. Эти значения затем используются для выполнения соединения rightouter
с таблицей Users
. Результат соединения включает в себя все строки из таблицы Users
и только соответствующие строки из таблицы Heartbeat
. Предложение where
отфильтровывает все строки, в которых есть совпадающая строка в таблице Heartbeat
(т. е. где userEmail
нет null
). Наконец, оператор project-away
используется для удаления дублирующего столбца userEmail
из вывода.
Редактировать:
Heartbeat
| where HeartBeatDate between (datetime('2022-01-01 16:04:10')..datetime('2022-01-03 16:04:10'))//give the timezone here
| distinct userEmail
| join kind=rightouter (Users) on $left.userEmail == $right.userEmail
| where isempty(userEmail)
| project-away userEmail
| join kind=leftouter (Geolocation) on $left.userEmail1 == $right.userEmail
| where isempty(userEmail)
| project-away userEmail1
Заменить таблицу пульса геолокацией
На самом деле здесь задействованы три таблицы. Пользователи -> откуда будут выбраны данные пользователя. Heartbeat -> Пользователи должны существовать в такт в течение заданного диапазона времени. Геолокация -> Пользователи НЕ должны существовать в этой таблице.
Можете ли вы задать еще один подробный вопрос с этим требованием? Также предоставьте образцы данных с ожидаемыми результатами.
На самом деле я не могу публиковать новые вопросы в течение нескольких дней. Единственная разница между этим вопросом и новым вопросом заключается в том, что раньше мне понадобились пользователи, которых не существовало в одно мгновение. Теперь мне нужны пользователи, которые существуют в Heartbeat, но не существуют в геолокации.
Отредактировал ответ. Проверьте это один раз
Спасибо, Асвин, еще один вопрос. Как мы можем отредактировать запрос, чтобы пропустить записи, попадающие между 2 и 6 часами утра?
Как называется поле, содержащее сведения о времени?
Спасибо, Асвин, все работает отлично. У меня есть еще одна таблица под названием «Геолокация» с тем же полем электронной почты, и теперь мне нужно получить всех пользователей, которые существуют в тактовом сигнале, но НЕ в геолокации, в пределах указанного диапазона времени в таблице пульса. Как я могу изменить приведенный выше запрос?