Есть ли способ найти разность даты и времени по столбцу в Data Explorer Kusto? Я хотел бы узнать общее время, проведенное каждым путешественником в Испании.
Путешественник считается находящимся в стране с момента прибытия в эту страну до момента прибытия в следующий пункт назначения. Вот крайние случаи:
- Если TripComplete == 'Да' и эта страна является последним посещенным пунктом назначения, разница, поездка продолжается, и затраченное время должно быть разницей между now () и временем входа ,
- Если TripComplete == 'Нет' и эта страна является последним посещенным пунктом назначения, это считается концом поездки. Скажем, для Испании время, проведенное в Испании, должно быть временем, проведенным в Испании в предыдущих поездках путешественником + время с момента их последнего въезда в этот город Испании (сейчас () - EntryTime).
Здесь это ожидаемый результат.
TravellerId result
1 05:00:00 [Madrid to Barcelona + Barcelona to London]
2 00:00:00 [Trip complete]
3 1.00:00:00 [now() - Malaga EntryTime]
4 05:00:00 [now() - Malaga EntryTime]
5 2:00:00 [Malaga to London]
6 1.16:00:00 [Madrid to Barcelona + (now() - Barcelona EntryTime)]
7 11:00:00 [Madrid to London + Barcelona to Beiging]
Источник:
set query_now = datetime(2020-02-04 5:00:00);
datatable(TravellerId:int, Country:string, City:string, TripComplete:string, EntryTime: datetime)
[
1, 'China', 'Beiging', 'Yes', datetime(2020-02-02 12:00:00),
1, 'Spain', 'Madrid', 'Yes',datetime(2020-02-02 13:00:00),
1, 'Spain', 'Barcelona', 'Yes',datetime(2020-02-02 15:00:00),
1, 'UK', 'London', 'Yes', datetime(2020-02-02 18:00:00),
2, 'Spain', 'Malaga', 'Yes', datetime(2020-02-03 5:00:00),
3, 'Spain', 'Malaga', 'No', datetime(2020-02-03 5:00:00),
4, 'China', 'Beiging', 'No', datetime(2020-02-03 5:00:00),
4, 'Spain', 'Malaga', 'No', datetime(2020-02-04 00:00:00),
5, 'China', 'Beiging', 'No', datetime(2020-02-01 5:00:00),
5, 'Spain', 'Malaga', 'No', datetime(2020-02-02 5:00:00),
5, 'UK', 'London', 'No', datetime(2020-02-02 7:00:00),
6, 'China', 'Beiging', 'No', datetime(2020-02-02 12:00:00),
6, 'Spain', 'Madrid', 'No',datetime(2020-02-02 13:00:00),
6, 'Spain', 'Barcelona', 'No',datetime(2020-02-02 14:00:00),
7, 'Spain', 'Madrid', 'Yes',datetime(2020-02-02 13:00:00),
7, 'UK', 'London', 'Yes', datetime(2020-02-02 18:00:00),
7, 'Spain', 'Barcelona', 'Yes',datetime(2020-02-03 15:00:00),
7, 'China', 'Beiging', 'Yes', datetime(2020-02-03 21:00:00),
]
| order by TravellerId asc, TripComplete asc
//Incorrect because next() calculation should be limited to the same traveler.
//Should be something like - if tripComplete = Yes then nextEntry = next(EntryTime, 1, now()) else, nextEntry = next(EntryTime, 1, EntryTime)
| extend nextEntry = next(EntryTime, 1, now())
| extend diffNext = nextEntry - EntryTime
| where Country == "Spain"
| summarize TimeSpentInSpain = sum(diffNext) by TravellerId