У меня 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;
Вместо объединения таблиц 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
Выход