MS Access - Row_Number 分区方式

Posted

技术标签:

【中文标题】MS Access - Row_Number 分区方式【英文标题】:MS Access - Row_Number Partition by 【发布时间】: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) ") 

【问题讨论】:

【参考方案1】:

需要一个唯一的记录标识符 - 应该提供一个自动编号字段(以下查询中的 ID)。考虑:

SELECT FX_Rates.Currency, FX_Rates.Exchange_Rate, FX_Rates.Date_of_Report, 
  (SELECT Count(*) AS HowMany
   FROM FX_Rates AS Dupe
   WHERE Dupe.ID < FX_Rates.ID AND Dupe.Currency=FX_Rates.Currency 
   AND Dupe.Exchange_Rate=FX_Rates.Exchange_Rate
   AND Dupe.Date_of_Report=FX_Rates.Date_of_Report)+1 AS GrpSeq
FROM FX_Rates;

欲了解更多信息,请查看http://allenbrowne.com/ranking.html

【讨论】:

您好,谢谢或回复我,我已经绑定了这个,它对我不起作用,因为我的数据中没有名为 ID 的字段。您是否有理由包含以下内容:WHERE Dupe.ID 我发布的内容对我有用。您可以轻松地将自动编号字段添加到表中。 ID 是自动编号字段。 谢谢你,我在autonum中添加了,现在可以正常工作了。感谢您的帮助。

以上是关于MS Access - Row_Number 分区方式的主要内容,如果未能解决你的问题,请参考以下文章

在 MS Access 中的查询表达式中出现语法错误(缺少运算符)

Row_Number() 根据连续行进行分区

在禁用分区功能的 SQL 中使用分区上的 Row_number

ROW_NUMBER() OVER() 在一个奇怪的地方分区

SQL Server:row_number 分区不重置计数器

如何在 Access 查询中显示行号,如 SQL 中的 ROW_NUMBER