根据列 sql powershell 获取最新的重复项

Posted

技术标签:

【中文标题】根据列 sql powershell 获取最新的重复项【英文标题】:Get latest duplicates based on a column sql powershell 【发布时间】:2021-12-09 20:34:32 【问题描述】:

我有一个从下面的 sql 查询中检索到的表

   Id   Date-Time            FilesA    FilesB

   556  2020-10-13 21:12:04  temp1.txt fels.csv
   133  2020-09-08 03:22:16  NA        temp2.txt
   556  2020-10-13 22:02:44  temp1.txt fels.csv
   203  2021-08-03 03:22:16  macs.xml  temp2.txt

我正在提取 FilesA 和 FilesB 列并对 Id 列的所有 Id 进行一些操作。但是 Id 列中有一些重复项,我只需要基于 Date-Time 列对最新的 Id 执行操作,例如 556 我需要使用第三行的 FilesA 和 FilesB,因为它是最新生成的,即, 22:02。我可以像这样拥有多个不同 ID 的副本。如何使用 powershell 脚本实现这一目标? 我发现用于识别重复项的所有内容都是使用 csv,这在这里似乎没有帮助,因为我不需要 csv,并且对于时间日期列,是否有类似将检索到的列数据转换为日期时间对象然后进行比较?我迷路了。

$SqlAdapter.SelectCommand = $SqlCmd
$Dataset = New-Object System.Data.Dataset
$SqlAdapter.Fill($Dataset)
$DataSet.Tables[0]
$data1=$DataSet.Tables[0]
$data1.FilesA #some operations
#need to perfrom the actions on all ids and for duplicates only on the latest ones

【问题讨论】:

您是否考虑过修改 SQL 查询以在它到达 Powershell 之前对其进行过滤?见***.com/questions/6841605/get-top-1-row-of-each-group 【参考方案1】:

使用Group-Object 将行按Id 分组,然后使用Sort-Object -Descending |Select -First 从每个组中选择日期最新的行:

$newestRowPerId = $data1 |Group-Object Id |ForEach-Object  
    $_.Group |Sort-Object -Property 'Date-Time' -Descending |Select -First 1 

【讨论】:

以上是关于根据列 sql powershell 获取最新的重复项的主要内容,如果未能解决你的问题,请参考以下文章

如何根据 laravel 中的一列获取最新记录?

Oracle SQL 查询从一行中的多个列中获取最新数据

Python sqlite3 SQL查询获取具有最新日期但每个唯一列限制的所有条目

Powershell: powershell获取当前目录下最新创建的文件

SQL 根据最大​​列获取行

(17)Powershell中的重定向运算符