我有一张桌子,数据横跨两周。我想查看前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'
答案 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()