Как присоединиться к ближайшему (нижняя дата)

У меня 2 стола.

Первый называется MachineTimes. Эта таблица не обновляется ежедневно, и она дает вам значение (CumulativeTimes), которое показывает, сколько часов машина использовалась до этого момента.

У меня есть вторая таблица под названием (SessionList), которая содержит SerialNumbers, SessionIds и StartTimes для этих сеансов.

Что я хочу сделать, так это объединить обе таблицы в TimeStamp и StartTime вместе, но я хочу сопоставить с ближайшим (более низким) доступным TimeStamp.

В результате дал мне этот тип таблицы.

До сих пор я использовал этот подход, когда, если есть совпадение в определенный день, он дает мне правильный CumulativeTimes, но в противном случае он дает мне пробелы, чего я пытаюсь избежать.

let CumulativeTimes_Query = MachineTimes
| extend StartTime2 = format_datetime(TimeStamp,'yy-MM-dd');
let age_of_machine = SessionList
| distinct SerialNumber, SessionId, StartTime2 = format_datetime(TimeStamp,'yy-MM-dd')
| join kind=inner CumulativeTimes_Query on StartTime2, SerialNumber
| project SerialNumber, SessionId, CumulativeTimes;
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
0
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вместо объединения таблиц MachineTimes и SessionList на основе полей StartTime2 и SerialNumber вы можете присоединиться только на основе поля SerialNumber. Затем найдите разницу между полем Timestamp и полем StartTime даты для каждой строки. Затем из полученных данных сгруппируйте по SerialNumber, SessionId и возьмите минимальное значение поля difference. Ниже приведен код.

let MachineTimes = datatable(SerialNumber:string, TimeStamp:datetime  , CumulativeTimes:string )
[
'ABC-1','2023-04-17','709.8082847',
'ABC-1','2023-04-14','709.7787561',
'ABC-2','2021-07-12','45.164978',
'ABC-2','2021-07-08','45.162995',
'ABC-2','2021-07-07','45.152477',
'ABC-2','2021-06-08','45.103493',
'ABC-2','2021-04-29','1.304171',
'ABC-3','2021-10-19','1.523642',
'ABC-3','2021-10-14','1.520901',
'ABC-3','2021-09-23','1.514814',
'ABC-3','2021-09-22','1.512814',
'ABC-3','2021-07-06','0.469807',
];
let SessionList = datatable(SerialNumber:string, SessionId:string, StartTime:datetime )
[
'ABC-1','ABC1-123','2023-04-17',
'ABC-1','ABC1-124','2023-04-15',
'ABC-1','ABC1-125','2023-04-14',
'ABC-2','ABC2-123','2021-06-13',
'ABC-2','ABC2-124','2021-06-08',
'ABC-3','ABC3-123','2021-10-20',
];
let CumulativeTimes_Query = MachineTimes;
let age_of_machine = SessionList
| join kind=inner CumulativeTimes_Query on  SerialNumber
| extend difference=abs(datetime_diff('day',TimeStamp,StartTime))
| summarize arg_min(difference, *) by SerialNumber, SessionId
| project SerialNumber, SessionId, CumulativeTimes
| order by SerialNumber asc ;
age_of_machine

Выход

Серийный номер Идентификатор сессии CumulativeTimes АВС-1 АВС1-125 709.7787561 АВС-1 АВС1-124 709.7787561 АВС-1 АВС1-123 709.8082847 АВС-2 АВС2-124 45.103493 АВС-2 АВС2-123 45.103493 АВС-3 АВС3-123 1.523642

Скрипка

Другие вопросы по теме