如何使用一个数据库表计算随时间的差异?

Posted

技术标签:

【中文标题】如何使用一个数据库表计算随时间的差异?【英文标题】:How do I calculate the difference over time using one database table? 【发布时间】:2014-06-30 13:14:40 【问题描述】:

我有一个包含三列的表格:PlayerScoreDate

我想创建一个查询,将每个玩家的总得分与一周前的总得分进行比较。

例如,我希望能够收集信息以便能够输出:

1st place this week: **Bob** (**1875** Score) - up by **7** points since last week!

谢谢

编辑:根据要求添加更多信息。

目前,我有几个查询显示总分、平均分等数据。

当我在网站上输入这些数据时,我手动计算了差异有多少。示例:

Player            Champion    Role    Games   Ratio   Sum Of Kills   Sum Of Deaths
Startmanningup    Ezreal      Adc     8       4.20        63             15
Voyboy            Tristana    Adc     4       3.33        30              9

如果上周 Startmanningups 比率是 4.18,我想要一个列来显示差异是 0.02。

我的餐桌信息如下所示:

Player       Champion    Role    Kills    Deaths  Assists Win     Time
lord zosh    master yi   jungle   11        2        6    1     2014-06-27
lolbree      lucian      adc       7        0        7    1     2014-06-27

编辑 2:

好的,我可以得到一个查询,该查询将显示我想要比较的数字。但我不知道如何使用实际显示分数差异的列进行查询(在 Access 中,我不断收到聚合查询错误)。

【问题讨论】:

请提供示例数据并尽最大努力解决问题。 数据库是 MS Access 【参考方案1】:

用于名为 [Scores] 的表中的测试数据

Date        Player  Score
----------  ------  -----
2014-06-23  Gord       30
2014-06-23  Hank       23
2014-06-30  Gord       27
2014-06-30  Hank       28

查询

SELECT 
    cur.Date, 
    cur.Player, 
    prev.Score AS ScoreLastWeek,
    cur.Score AS ScoreNow,
    cur.Score - prev.Score AS Change
FROM
    Scores cur
    INNER JOIN
    Scores prev
        ON cur.Player = prev.Player
            AND cur.Date = DateAdd("d", 7, prev.Date)

返回

Date        Player  ScoreLastWeek  ScoreNow  Change
----------  ------  -------------  --------  ------
2014-06-30  Gord               30        27      -3
2014-06-30  Hank               23        28       5

【讨论】:

有没有办法在一条 SQL 语句中完成所有操作,而不是使用多个查询?我不介意答案是用 postgresql 还是其他非杂乱的 sql 语言(访问 sql 括号太多)【参考方案2】:

获取当前平均分:

select player, avg(score)
from score_table
group by player
order by avg;

要获得一周前的平均分,您可以:

select player, avg(score)
from score_table
where score_table.date < now()-'1 week'::interval
group by player
order by avg;

这可以让您开始获取一些数据来处理并在您的应用中组合以产生所需的输出。

【讨论】:

问题被标记为“ms-access”,这看起来不像 Access 语法。 遇到语法错误 - MS Access 中是否有类似的功能? Q 最初没有被标记为 [ms-access]!我没有用过,也从来没有用过,但谷歌快速浏览一下就知道了:office.microsoft.com/en-us/access-help/…这有什么帮助吗? 好的,现在我不断收到“聚合查询”错误。我做了一个查询,显示 1 周前的平均分数。我正在尝试进行另一个查询,将该平均分数与当前分数进行比较平均分数,但我无法让它发挥作用。 我能不能只使用某种带有子选择的 SQL 语句?

以上是关于如何使用一个数据库表计算随时间的差异?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SQL 获取 2 列之间日期差异的计数(值的分布)?

如何计算行值相对于其他行值的差异总和,特别是使用窗口函数不包括该行

如何从两个纪元时间戳计算 hh:mm:ss 中 hh:mm:ss 的差异?

如何计算 R 中两个数据集的显着差异?

SQL,在计算两次之间的差异时插入表

比较与特定字段有关的两个表之间的差异时如何正确连接