You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell数据集保留MsgNr最新状态记录的脚本优化需求

解决PowerShell保留每个MsgNr最新行并按DateTime排序的问题

问题原因

你原来的脚本逻辑存在缺陷:先按DateTime排序后,再执行Sort-Object -Property MsgNr -Unique时,PowerShell会重新按MsgNr排序,再保留每个MsgNr的第一个条目,这直接打乱了之前按DateTime的排序结果,自然得不到按DateTime从新到旧排列的预期输出。

两种可行解决方案

方案1:使用Group-Object分组筛选

先按MsgNr分组,每组内筛选出DateTime最新的行,最后统一按DateTime降序排序:

# 假设数据集存储在$dataset变量中
$dataset | Group-Object -Property MsgNr | ForEach-Object {
    # 每组内按DateTime降序排序,取第一行(最新的记录)
    $_.Group | Sort-Object -Property DateTime -Descending | Select-Object -First 1
} | Sort-Object -Property DateTime -Descending

方案2:用哈希表去重(更高效,适合大数据集)

先按DateTime降序排序,然后遍历每条数据,用哈希表记录已处理的MsgNr,只保留首次出现的条目(因为已按时间降序,首次出现的就是该MsgNr的最新记录):

$seen = @{}
$dataset | Sort-Object -Property DateTime -Descending | ForEach-Object {
    if (-not $seen.ContainsKey($_.MsgNr)) {
        $seen[$_.MsgNr] = $true
        $_
    }
}

该方法仅需一次排序,性能优于Group-Object方案,尤其适合处理大规模数据集。

效果说明

两种方案均可实现:

  • 为每个MsgNr保留DateTime最新的完整行数据
  • 最终结果严格按DateTime从新到旧排序

内容的提问来源于stack exchange,提问作者HoRiOnS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 19:32:04