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

时间:2014-06-30 13:14:40

标签: sql database ms-access

我有一个包含三列的表:播放器得分日期

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

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

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

如果上周的Startmannings比率为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中我一直收到聚合查询错误)。

2 个答案:

答案 0 :(得分:2)

对于名为[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

答案 1 :(得分:0)

获得当前平均得分:

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;

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