【发布时间】:2016-06-29 01:52:39
【问题描述】:
我正在试用 MS Access SQL 查询。我的数据结构如下 Rent Table
我的想法是我想拆分表以使用 [Year_Start] 和 [Month_Start] 作为基础来收集最多 12 个月前的最新启动。所以我的粗略代码是:
SELECT [Renter_Name], [Amount]
FROM RentTable1
WHERE [Year_Start] = Max([Year_Start]) AND [Month_Start] = Max([Month_Start])
ORDER BY [Renter_Name];
随后,其他月份表在概念上将被编码如下:
SELECT [Renter_Name], [Amount]
FROM RentTable1
WHERE [Year_Start] = Max([Year_Start]) AND [Month_Start] = Max([Month_Start]) - 1
ORDER BY [Renter_Name];
然后接下来的月份将使用减号进行调整。
SELECT [Renter_Name], [Amount]
FROM RentTable1
WHERE [Year_Start] = Max([Year_Start]) AND [Month_Start] = Max([Month_Start]) - 2
ORDER BY [Renter_Name];
我还在考虑 [Month_Start] = Max([Month_Start]) - x 为零 (0) 或负数的情况,因此理论代码为:
SELECT [Renter_Name], [Amount]
FROM RentTable1
IF Max([Month_Start]) - X <= 0 THEN
WHERE [Year_Start] = Max([Year_Start]) - 1 AND [Month_Start] = Max([Month_Start]) - X
ELSE
WHERE [Year_Start] = Max([Year_Start]) AND [Month_Start] = Max([Month_Start]) - X
END IF
ORDER BY [Renter_Name];
*** X 是最近开始月份和年份的倒数月份。
很明显,你看我的 SQL 编码能力真的很弱。请原谅我,因为我真的是一个初学者。所以还有一些其他标准编程,比如 If-Then-Else 语句。
我希望有人可以建议更正上述代码。
谢谢!感谢所有偶然发现这个问题的人。
编辑 1:
澄清一下,这是预期的想法:
在示例中,最近的时间段是 2016 年和 4 年。所以它应该为 TABLE1 选择它。
后续查询将从最近一个周期开始减去一个月,因此结果应该是 2016 年和 3 年。这一直持续到 2016 年和 1 月。
当 4 - 4 发生等于 0 时,查询应该能够跳过这个不合逻辑的步骤并通过 (2016 - 1) 并使用 (2016 - 1) 的结果(即 2015 和12.
【问题讨论】:
-
您的查询在概念上看起来是正确的,但您是否尝试过任何方法?
-
我尝试了 iif,但出现了几个错误。尝试将片段括在括号中。另外,如果您注意到最后一个代码(以及所有其他代码),我使用了最大“年”和最大“月”,所以我猜为什么什么都没有出现,因为它认为“2016”和“12”是没有记录的月份找到而不是“2016”和“4”,这是我打算最新的,并且将从那里提取倒退十二个月的每个月 - 例如2016 & 4 = TABLE1, 2016 & (4 -1) = TABLE2, 2016 & (4 - 2) = TABLE 3 .... 如果 (4 - 4) 发生,它将执行 (2016 - 1) & max of year 2015 年 12 月。
-
IIf ( expr , truepart , falsepart )