Reputation: 315
I have a table which I would like to get the latest entry for each group using Kusto Query Language. Here's the table:
DocumentStatusLogs
ID | DocumentID | Status | DateCreated |
---|---|---|---|
2 | 1 | S1 | 7/29/2011 |
3 | 1 | S2 | 7/30/2011 |
6 | 1 | S1 | 8/02/2011 |
1 | 2 | S1 | 7/28/2011 |
4 | 2 | S2 | 7/30/2011 |
5 | 2 | S3 | 8/01/2011 |
6 | 3 | S1 | 8/02/2011 |
The table would be grouped by DocumentID and sorted by DateCreated in descending order. For each DocumentID, I want to get the latest status.
My preferred output:
DocumentID | Status | DateCreated |
---|---|---|
1 | S1 | 8/02/2011 |
2 | S3 | 8/01/2011 |
3 | S1 | 8/02/2011 |
Is there any way to get only the top from each group using KQL?
The pseudo-code GetOnlyTheTop is as follows:
SELECT
DocumentID,
GetOnlyTheTop(Status),
GetOnlyTheTop(DateCreated)
FROM DocumentStatusLogs
GROUP BY DocumentID
ORDER BY DateCreated DESC
Credit: Question adapted from DPP's SQL question: Get top 1 row of each group
Upvotes: 11
Views: 15795
Reputation: 25895
You can use the partition
operator, or the arg_max()
aggregation function.
For example:
DocumentStatusLogs
| partition by DocumentId
(
top 1 by DateCreated desc
)
Or
DocumentStatusLogs
| summarize arg_max(DateCreated, *) by DocumentId
Upvotes: 28