当前位置: 首页 > 知识库问答 >
问题:

MS Access-对于给定变量的每次出现,将“计数”值增加1?

茅涵映
2023-03-14

我正在寻找一个查询,它将:读取一列中一行的当前值,将其与上面的行进行比较,如果上面的行匹配,则依次计数。本质上,这听起来像是一个运行计数,而不是计数(*),几乎就像行应该在每一组行上执行计数(变量)-1,直到它达到最小零。下面的示例假设我们有一个每日销售额列表,并计算给定产品ID的出现次数。这有可能吗?

选择Count(ProductID)作为SalesCount未知公式作为SalesOccurrence

共有1个答案

盖马鲁
2023-03-14

您所描述的内容有时可以在Access SQL中使用包含其中一个字段之间的大于或小于关系的自联接来完成。例如,假设我们有一个名为[SalesHistory]的表,其中包含数据

ProductID  SalesDate   DailySales
---------  ----------  ----------
001        2013-10-16         225
001        2013-10-17         195
001        2013-10-18         250
002        2013-10-16         350
002        2013-10-17         375
002        2013-10-18         330

询问

SELECT t1.ProductID, t1.SalesDate, t2.ProductID, t2.SalesDate
FROM 
    SalesHistory t1 
    INNER JOIN 
    SalesHistory t2 
        ON t1.ProductID = t2.ProductID 
            AND t1.SalesDate >= t2.SalesDate
ORDER BY t1.ProductID, t1.SalesDate

返回以下结果

t1.ProductID  t1.SalesDate  t2.ProductID  t2.SalesDate
------------  ------------  ------------  ------------
001           2013-10-16    001           2013-10-16  
001           2013-10-17    001           2013-10-17  
001           2013-10-17    001           2013-10-16  
001           2013-10-18    001           2013-10-18  
001           2013-10-18    001           2013-10-17  
001           2013-10-18    001           2013-10-16  
002           2013-10-16    002           2013-10-16  
002           2013-10-17    002           2013-10-17  
002           2013-10-17    002           2013-10-16  
002           2013-10-18    002           2013-10-18  
002           2013-10-18    002           2013-10-17  
002           2013-10-18    002           2013-10-16  

请注意,对于t1。productID='001't1返回一行。SalesDate=#2013-10-16#,t1的两行。SalesDate=#2013-10-17#,以此类推。因此,我们可以调整该查询来计算返回的行,这将根据productID给我们每个日期的排名

SELECT t1.ProductID, t1.SalesDate, COUNT(*) AS DateRank
FROM 
    SalesHistory t1 
    INNER JOIN 
    SalesHistory t2 
        ON t1.ProductID = t2.ProductID 
            AND t1.SalesDate >= t2.SalesDate
GROUP BY t1.ProductID, t1.SalesDate

...返回:

ProductID  SalesDate   DateRank
---------  ----------  --------
001        2013-10-16         1
001        2013-10-17         2
001        2013-10-18         3
002        2013-10-16         1
002        2013-10-17         2
002        2013-10-18         3

如果我们在Access中保存该查询为[SalesDateRanksByProducts],那么我们可以在另一个查询中使用它来显示原始数据旁边的DateRank“计数器”:

SELECT 
    SalesHistory.ProductID, 
    SalesHistory.SalesDate, 
    SalesHistory.DailySales, 
    SalesDateRanksByProduct.DateRank
FROM 
    SalesHistory 
    INNER JOIN 
    SalesDateRanksByProduct 
        ON (SalesHistory.SalesDate = SalesDateRanksByProduct.SalesDate) 
            AND (SalesHistory.ProductID = SalesDateRanksByProduct.ProductID)
ORDER BY SalesHistory.ProductID, SalesHistory.SalesDate;

...返回:

ProductID  SalesDate   DailySales  DateRank
---------  ----------  ----------  --------
001        2013-10-16         225         1
001        2013-10-17         195         2
001        2013-10-18         250         3
002        2013-10-16         350         1
002        2013-10-17         375         2
002        2013-10-18         330         3
 类似资料:
  • 给定类 我想添加一个方法,该方法计算列表中某个数字出现的次数。我尝试了以下方法,但它并不总是有效的,我不确定我做错了什么。 此方法适用于,(它应该返回) 但对于,,则返回。

  • 我想计算一下给定句子中出现了多少个单词。我使用的是C编程语言。它不能计算最后一个字。在给定的字符串中,它计算每个单词发生的次数。如果有像这样的句子,那么程序应该算。但在我的情况下,它不算作。而不是计算,然后: 我的代码:

  • 问题内容: 当用户访问我的Flask应用中的页面时,我想增加一个计数器。如果有两个用户访问该页面,则计数应增加2。我尝试了以下操作,但计数始终为1。如何增加每次访问的值? 问题答案: 同时计数很难。假设计数为0。如果两个用户都以足够近的时间间隔命中端点,则他们每个人可能会得到值0,将其递增为1,然后放回原值。有两个用户命中了端点,但最终计数为1,而不是2。要解决此问题,您需要使用支持原子递增的数据

  • 我有以下计数器指标 如何计算最近2分钟内活动设备的数量,即2(设备id 3和4)?

  • 我想监控值设置为每秒普罗米修斯计的次数。不幸的是,我不能添加另一个计数器,应该使用量规。我尝试使用更改函数,但要么我不明白它的目的,要么它根本不做这项工作。将测量仪图与具有时间范围的变化()输出进行比较没有显示任何相关性。 在我看来,使用count_over_并未提供该指标,原因与changes()相同。 有没有一种正确的方法来计算将值设置为每秒普罗米修斯计的次数? 假设我们有: prom_仪表=

  • 我正在尝试计算Pandas数据帧中一个值与另一个值一起出现的次数,并计算每行的次数。 这就是我的意思: 假设我想计算与,我希望结果是: 这里的< code>freq(频率)列表示< code>a列中的值与< code>t列中的值一起出现的次数。 请注意,考虑到我的数据帧的大小,仅计算发生的次数的解决方案将导致错误的频率。 有没有办法在Python中实现这一点?