使用两个WHERE子句的SQL查询帮助

时间:2019-04-16 14:19:53

标签: sql

我有一张桌子,数据横跨两周。我想查看前7天的平均值,然后是接下来8天的平均值。

我没有运气就尝试过各种JOINS。我是SQL的新手,所以我可能缺少一些简单的东西。

基本上,这些查询有效。如何将它们结合在一起?

select count(Field)/8 
from TABLE 
WHERE Publish_date >= '04/05/19'

select count(Field)/7 
from TABLE 
WHERE Publish_date < '04/05/19'

3 个答案:

答案 0 :(得分:0)

如果您确实需要将它们合并,则可以执行子查询:

SELECT
    (
        SELECT SUM(Field)/8 
        FROM TABLE 
        WHERE Publish_date >= '04/05/19'
    ) as date1,
    (
        SELECT SUM(Field)/7 
        FROM TABLE 
        WHERE Publish_date < '04/05/19'
    ) as date2

请注意,您希望使用SUM而不是COUNT,因为COUNT只是获得行计数,而不是其值的总和。

答案 1 :(得分:0)

只需在它们之间使用UNION ALL,如下所示:     

select count(Field)/8 from TABLE WHERE Publish_date >= '04/05/19'
    UNION ALL
    select count(Field)/7 from TABLE WHERE Publish_date < '04/05/19'

答案 2 :(得分:0)

我认为您可以尝试使用AVG()函数。如果您的日期合适,天数会自动处理。

2周=> 14天。您是怎么获得7 + 8 = 15天的?

如果您需要两个不同的行-

;with t (val, dt) as (
    select 183, getdate()-6 union all
    select 183, getdate()-5 union all
    select 183, getdate()-4 union all
    select 183, getdate()-3 union all
    select 183, getdate()-2 union all
    select 183, getdate()-1 union all
    select 183, getdate() union all --< cutoff date
    select 183, getdate()+1 union all
    select 183, getdate()+2 union all
    select 183, getdate()+3 union all
    select 183, getdate()+4 union all
    select 183, getdate()+5 union all
    select 183, getdate()+6 union all
    select 20, getdate()+7 
)
select 'first-half' , AVG(val) averg from t where dt < getdate()
union all
select 'second-half' , AVG(val) averg from t where dt >= getdate()