根据列 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 获取最新的重复项的主要内容,如果未能解决你的问题,请参考以下文章
Python sqlite3 SQL查询获取具有最新日期但每个唯一列限制的所有条目