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

PowerShell导入CSV按ID分组取最早开始日期、最晚结束日期实现问题

原代码存在的问题
  • 循环逻辑冗余:逐行遍历CSV会重复处理相同ID的记录,最终只会保留最后一个ID的处理结果
  • 语法错误:Start Date和End Date的赋值语句缺少右括号,无法正常解析
  • 取值逻辑错误:计算End Date时错误读取了Start Date列的内容,无法拿到正确的结束日期值
  • 排序逻辑冗余:降序排序后取最后1条等价于升序取第1条,逻辑冗余且性能更低
  • 导出参数缺失:默认Export-Csv会在输出文件开头生成多余的类型注释行,不符合CSV通用格式要求
修复后的完整代码
$source = "C:\test\test.csv"
$outPut = "C:\test\Testsort.csv"

$csv = Import-Csv -Path $source
# 按ID分组,每个ID仅处理一次
$processResult = $csv | Group-Object -Property ID | ForEach-Object {
    $currentGroup = $_.Group
    # 取当前ID最早的开始日期
    $earliestStart = $currentGroup | Sort-Object { [datetime]$_.'Start Date' } | Select-Object -First 1 -ExpandProperty 'Start Date'
    # 取当前ID最晚的结束日期
    $latestEnd = $currentGroup | Sort-Object { [datetime]$_.'End Date' } -Descending | Select-Object -First 1 -ExpandProperty 'End Date'
    # 构造输出对象
    [pscustomobject]@{
        ID          = $_.Name
        'Start Date' = $earliestStart
        'End Date'   = $latestEnd
    }
}
# 导出结果,去除多余类型头,使用UTF8编码保证兼容性
$processResult | Export-Csv -Path $outPut -NoTypeInformation -Encoding UTF8
优化说明
  • 采用Group-Object直接按ID分组,避免重复遍历相同ID的记录,处理效率更高
  • 日期排序逻辑简化,降序排序后直接取第一条就是最大日期值,逻辑更清晰
  • 统一收集所有ID的处理结果后一次性导出,不会出现结果丢失的问题
  • 增加编码参数适配不同系统的CSV读取需求,避免出现乱码问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:54:01