查询MS Access多个条件(在哪里)

时间:2017-12-25 13:11:18

标签: sql ms-access

我有这些数据:

enter image description here

*周,年,值以数字格式

我试图获得过去5周的平均值:5,000(即25,000 / 5)

到目前为止,我有这个查询

x =用户输入/获取当前年度的当周(当前周) y =当前日期,年份

INSERT INTO RR5 ([ID],[RR5]) 
SELECT ID, ROUND((SUM(AMOUNT)/5),4) AS RR5  
FROM resultTable 
WHERE Years =" & y - 1 & " and Week > " & 52 - (x - 5) & " Group BY ID"

但是,我只能得到第51周和第52周。我需要将附加条件告诉编译器我需要周> 2016年50周和周< = 2017年3月。

Years = " & y & " and Weeknum < " & x 

获得第1周和第3周。

我不认为我可以把这两个条件放在同一个&#34;其中&#34;。我该如何解决这个问题?

解决方案:

 INSERT INTO RR5 ([ID],[RR5]) SELECT ID, ROUND((SUM(AMOUNT)/5),4) AS RR5  FROM resultTable WHERE (Years = " & Y - 1 & " and WeekNum > 52 - (5-" & x & ")) OR ( Years = " & Y & " and Weeknum <= " & x & " ) Group BY ID

只需在每个条件上添加括号,并将其与OR连接以用于其他条件。

感谢您的支持,希望能帮助任何有同样问题的人。

2 个答案:

答案 0 :(得分:0)

您的根本问题是由您存储日期数据的方式引起的。而不是年份和周,最好将其存储为实际日期。但是,作为一种解决方法,您可以将现有年份和周转换为日期,然后在where子句中使用它。

WHERE (CDate("1 JAN " & Year) + (Week - 1) * 7) > (CDate("1 JAN " & y) + (x - 1) * 7)

这是做什么的,它会占用您拥有的每条记录,并使用CDate函数将其转换为给定年份的1月1日。因为这些日期实际上存储为双号,其中1对应24小时,然后我添加到1月1日的日期,以找出每周的第一天是什么。 (Week - 1)假设第一周从1月1日开始。

现在,您只需对用户提供的年(y)和周(x)使用相同的逻辑。查询将返回比用户指定的日期晚发生的任何内容。

答案 1 :(得分:0)

您可以使用:

INSERT INTO RR5 ([ID],[RR5]) 
SELECT ID, ROUND((SUM(AMOUNT)/5),4) AS RR5 
FROM
    (SELECT TOP 5 *
    FROM resultTable 
    WHERE Years * 100 + WeekNum <= SelectedYear * 100 + SelectedWeek
    ORDER BY Years Desc, WeekNum Desc)