【发布时间】:2020-07-16 16:38:23
【问题描述】:
我正在尝试在 MS Access 中进行等效的 row_number 分区。
我有一个名为 FX_Rates 的货币表可供访问。
此表有一个货币字段、一个汇率字段和一个日期字段。 我想在一个字段中插入一个记录计数,该字段基本上会显示此表中是否有重复项,因为我想删除重复值,所以计数>1的任何内容。
例如,如果我有以下数据:
Currency ExchangeRate Date
EUR 1 31/12/2019
EUR 1 31/12/2019
GBP 1.1 31/12/2019
GBP 1.5 31/12/2019
我希望输出看起来像这样:
Currency ExchangeRate Date Count
EUR 1 31/12/2019 1
EUR 1 31/12/2019 2
GBP 1.1 31/12/2019 1
GBP 1.5 31/12/2019 1
通过在线查找,我想出了以下代码:
Call RunSQL("INSERT INTO FX_Rates_New " & _
"SELECT " & _
" t1.Currency, t1.Exchange_Rate, t1.Date_of_Report" & _
",COUNT(*) AS Count_of_Record " & _
"FROM FX_Rates AS t1 " & _
"INNER JOIN FX_Rates AS t2 ON t1.Currency = t2.Currency AND t1.Date_of_Report = t2.Date_of_Report " & _
"GROUP BY " & _
" t1.Currency, t1.Exchange_Rate, t1.Date_of_Report " & _
"ORDER BY t1.Date_of_Report, t1.Currency ")
然而,上面只是将唯一记录插入到一个新表中,而我知道只有 2 个的项目的计数为 4。
理想情况下,我想用上面演示的每个表旁边的计数来更新我当前的表。有谁知道最好的方法吗?
提前致谢,
编辑: 如果有人想以一种简单的方式做类似的事情,我实际上最终使用了以下代码,在 June7 的回复之后,我在 AutoNum 字段中添加了这使得完成我想要的事情变得更加容易:
Call RunSQL("DELETE * FROM FX_Rates " & _
"WHERE FX_Rates.ID NOT IN ( " & _
"SELECT Min(FX_Rates.ID) AS ID " & _
"FROM FX_Rates " & _
"GROUP BY " & _
"FX_Rates.Currency, FX_Rates.Date) ")
【问题讨论】: