Azure data explorer Kusto子查询引用";“外部”;查询

Azure data explorer Kusto子查询引用";“外部”;查询,azure-data-explorer,kql,Azure Data Explorer,Kql,我正在尝试编写一个Kusto(KQL)查询,在SQL中,我将使用一个子查询编写该查询,该子查询引用下面的“外部”查询。然而,我无法找到/理解如何在KQL中实现等效。在KQL中是否可能有一个子查询引用“外部”查询?如果没有,请使用其他方法来完成以下任务 其基本思想是将一个表连接到自身上,以获得下一个时间值。IE返回最小时间值,其中时间大于当前记录时间并与键匹配(本例中为DeviceName) DECLARE@DeviceIPs表(DeviceName-NVARCHAR(MAX)、DeviceIP-

我正在尝试编写一个Kusto(KQL)查询,在SQL中,我将使用一个子查询编写该查询,该子查询引用下面的“外部”查询。然而,我无法找到/理解如何在KQL中实现等效。在KQL中是否可能有一个子查询引用“外部”查询?如果没有,请使用其他方法来完成以下任务

其基本思想是将一个表连接到自身上,以获得下一个时间值。IE返回最小时间值,其中时间大于当前记录时间并与键匹配(本例中为DeviceName)

DECLARE@DeviceIPs表(DeviceName-NVARCHAR(MAX)、DeviceIP-NVARCHAR(MAX)、TimeGenerated-DATETIME)
在@DeviceIPs中插入选择“PC1”、“192.168.100.1”、“2021-01-01”
在@DeviceIPs中插入选择“PC1”、“192.168.100.2”、“2021-01-02”
在@DeviceIPs中插入选择“PC1”、“192.168.100.3”、“2021-01-03”
在@DeviceIPs中插入选择“PC2”、“192.168.100.3”、“2021-01-01”
在@DeviceIPs中插入选择“PC2”、“192.168.100.1”、“2021-01-02”
在@DeviceIPs中插入选择“PC2”、“192.168.100.2”、“2021-01-03”
挑选
i、 DeviceName,
i、 设备IP,
i、 时间生成为BeginDateTime,
ISNULL((从@DeviceIPs i2中选择MIN(i2.TimeGenerated),其中i.DeviceName=i2.DeviceName和i.TimeGenerated
在上述数据结构中,每一行表示设备被授予IP地址的时间(BeginDateTime)。我正在寻找的结果是,同时获得“EndDateTime”,这将是设备下一次被授予IP地址时的结果。如果没有“下一个记录”,我只是将一些随机的未来日期设置为结束日期,但这部分与这个问题并不相关。预期结果将是:

设备名称 设备 开始时间 结束日期时间 PC1 192.168.0.1 2021-01-01 2021-01-02 PC1 192.168.0.2 2021-01-02 2021-01-03 PC1 192.168.0.3 2021-01-03 2200-01-01 PC2 192.168.0.3 2021-01-01 2021-01-02 PC2 192.168.0.1 2021-01-02 2021-01-03 PC2 192.168.0.2 2021-01-03 2200-01-01
假设我正确理解了你的意图,以下方法应该有效:

.create table DeviceIPs (DeviceName:string, DeviceIP: string, TimeGenerated:datetime)

.ingest inline into table DeviceIPs <|
PC1,192.168.100.1,2021-01-01
PC1,192.168.100.2,2021-01-02
PC1,192.168.100.3,2021-01-03
PC2,192.168.100.3,2021-01-01
PC2,192.168.100.1,2021-01-02
PC2,192.168.100.2,2021-01-03

DeviceIPs
| order by DeviceName asc, TimeGenerated asc
| project DeviceName, DeviceIP, BeginDateTime = TimeGenerated, EndDateTime = case(next(DeviceName) == DeviceName, next(TimeGenerated), datetime(2200-01-01))
。创建表DeviceIPs(DeviceName:string,DeviceIP:string,TimeGenerated:datetime)

.ingest inline into table DeviceIPs假设我正确理解了您的意图,那么以下操作应该有效:

.create table DeviceIPs (DeviceName:string, DeviceIP: string, TimeGenerated:datetime)

.ingest inline into table DeviceIPs <|
PC1,192.168.100.1,2021-01-01
PC1,192.168.100.2,2021-01-02
PC1,192.168.100.3,2021-01-03
PC2,192.168.100.3,2021-01-01
PC2,192.168.100.1,2021-01-02
PC2,192.168.100.2,2021-01-03

DeviceIPs
| order by DeviceName asc, TimeGenerated asc
| project DeviceName, DeviceIP, BeginDateTime = TimeGenerated, EndDateTime = case(next(DeviceName) == DeviceName, next(TimeGenerated), datetime(2200-01-01))
。创建表DeviceIPs(DeviceName:string,DeviceIP:string,TimeGenerated:datetime)

.将内联摄入表设备IPS谢谢。我意识到我最初的描述不是很清楚。我现在已经更新了它以包含预期的输出。答案也相应地更新了。谢谢你解决了它!谢谢你。我意识到我最初的描述不是很清楚。我现在已经更新了它以包含预期的输出。答案也相应地更新了。谢谢你解决了它!