我需要你的帮助:
我在想这个但不知道在访问查询中正确编写它:
Select ID, SUM(Amount) from tblRawData Where Years = '2017' and [Week num] = Max([Week Num]) - 2 < Max([Week Num] ) Group by ID
我想我需要一个子查询,但不能认为应用..
任何帮助将不胜感激!
谢谢!
答案 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。这很难阅读,更难打字(因为你必须将表名包装在括号中),并且更难调试。也不要将保留字用于表名。你可以逃脱它们,但如果你不这样做会更容易。我会使用驼峰套管或一些变体用于名称,在这种情况下,您的字段将是金额,年数和周数。