如何使用mssql每月获取价值

时间:2018-07-16 09:35:48

标签: sql sql-server statistics

我有列详细信息

Create table details(
    Id [nvarchar](255) primary key
    CurrentValue smallint,
    CreateAt DateTime
)

CREATE TABLE Dates (
  d DATE,
  PRIMARY KEY (d)
)
DECLARE @dIncr DATE = '2000-01-01'
DECLARE @dEnd DATE = '2100-01-01'

WHILE ( @dIncr < @dEnd )
BEGIN
  INSERT INTO Dates (d) VALUES( @dIncr )
  SELECT @dIncr = DATEADD(DAY, 1, @dIncr )
END

我想获取日期和日期为当前值的列,但有时并非每天都输入当前值,所以我想获取日期和日期的每一天。

这是我的查询:

select 
AVG(rd1.CurrentValue)
from details
left join Dates as c  ON c.d BETWEEN '07-01-2018' AND '07-29-2018'
GROUP BY c.d
order by c.d

我不知道该怎么做

以及如何求平均值

我期望的数据:

         Date  CurrentValue
    ========= =======
     1/2/2009    1500
     2/2/2009    2300
     3/2/2009     300
     4/2/2009    2200
     5/2/2009    0
    ...
    30/2/2009    1500
    etc.

3 个答案:

答案 0 :(得分:2)

您只需要从“日期”表中joinDetails表中,而不需要其他方法。通过这种方式,您将获得所有Dates值以及任何与以下内容匹配的Details值:

select c.d
      ,avg(rd1.CurrentValue) as AverageValue
from Dates as c
    left join details as d
        on c.d = d.CreateAt
where c.d between '07-01-2018' and '07-29-2018'
group by c.d
order by c.d

答案 1 :(得分:1)

将您的LEFT JOIN更改为

left join Dates as c  ON C.d = rd1.CreateAt
                        AND c.d BETWEEN '07-01-2018' AND '07-29-2018'

答案 2 :(得分:1)

  1. date表仅包含日期范围,没有空格,对吗?
  2. 表格日期的d列是什么?
  3. currentvalueCurrentWeight?为什么在您的代码中是CurrentValue但错误是CurrentWeight

尝试使用此代码,我假设列d是表date的日期。

date表将成为主表,因为日期没有空格,因此将其更改为右联接。我们将仅从表详细信息中获取任何数据,因此在使用平均值时,请使用ISNULL将空数据设置为零。

select c.d as [Date],
AVG(ISNULL(rd1.CurrentValue,0)) as [CurrentValue]
from details
right join Dates as c  ON c.d BETWEEN '07-01-2018' AND '07-29-2018'
GROUP BY c.d
order by c.d