访问查询以计算带有条件的最后2个数字数据

时间:2017-04-12 04:32:48

标签: ms-access-2016

我需要你的帮助:

Data

我在想这个但不知道在访问查询中正确编写它:

Select ID, SUM(Amount) from tblRawData Where Years = '2017' and [Week num] = Max([Week Num]) - 2 < Max([Week Num] ) Group by ID

我想我需要一个子查询,但不能认为应用..

任何帮助将不胜感激!

谢谢!

1 个答案:

答案 0 :(得分:0)

以下是一个应该有效的查询:

SELECT r.ID, SUM(r.Amount) 
FROM tblRawData r
LEFT JOIN (
    SELECT id, Max([Week Num]) as maxWeek
    FROM tblRawData
    WHERE Years = '2017' 
    GROUP BY ID
) w ON r.id = w.id
WHERE r.Years = '2017' 
AND r.[Week num] >= w.maxWeek-1
GROUP BY r.ID

我假设您要为每个ID使用最长周。如果情况并非如此,那么我可以告诉您如何重新编写查询。

关于你的桌子设计的一些注意事项:

1)我强烈建议您为表添加主键。它会在以后为您节省大量的头痛。使用唯一ID可以更安全地删除。如果您的数据中出现意外重复,这将使您更容易理顺。它甚至可以阻止不良查询搞乱你的数据。

2)您似乎将“年”作为文本字段(在查询中将值包装在单引号中)。我会把它改成一个数字。数字可以节省空间和查询时间,因为它们占用的字节更少,更容易索引。

3)不要在表名中使用空格,例如Week Num。这很难阅读,更难打字(因为你必须将表名包装在括号中),并且更难调试。也不要将保留字用于表名。你可以逃脱它们,但如果你不这样做会更容易。我会使用驼峰套管或一些变体用于名称,在这种情况下,您的字段将是金额,年数和周数。