SQL移动平均线,每平方米平均价格计算

时间:2014-07-01 15:44:23

标签: sql average moving-average

我试图获得一组房地产数据的移动平均线,然后我可以使用MS SQL 2005绘制图形。

字段是:DateSold日期时间,FloorSQM十进制(8,2),价格十进制(10,0)

我需要做的是获得每月销售的所有房产的平均价格,这可以追溯到我们的数据,这可能是几年。

因此,我需要为每个房产定价Price / FloorSQM,然后每个月对它们应用移动平均线。希望这是有道理的。

我完全陷入困境,试图解决这个问题,谷歌无休止地无休止地混淆。

我以为我在另一篇文章中找到了我要找的东西,但我一直在"''""""当我尝试编译它时。

SELECT YEAR(DateSold) AS year, 
   MONTH(DateSold) AS month,
   ROUND(Euros/CONVERT(DECIMAL(10,2),FloorSQM),2) as avg
FROM
(select s.*, DATE_ADD(DTE, INTERVAL m.i MONTH) DateSold, m.i
FROM Property s
cross join (select 0 i union select 1 union select 2 union select 3 union 
         select 4 union select 5 union select 6 union select 7 union 
         select 8 union select 9 union select 10 union select 11) m) sq
WHERE DateSold <= curdate()
GROUP BY YEAR(DateSold), MONTH(DateSold)

当我有这个工作时,我需要引入一个WHERE子句,这样我就可以限制发现某些种类(房屋,公寓)和区域(纽约,洛杉矶等)的属性

有人可以伸出援助之手吗?非常感谢你的帮助。

2 个答案:

答案 0 :(得分:1)

这应该运行,你使用的是一些Mysql语法:

SELECT YEAR(DateSold) AS year, 
       MONTH(DateSold) AS month,
       ROUND(Euros/CONVERT(DECIMAL(10,2),FloorSQM),2) as avg
FROM (SELECT s.*, DATEADD(MONTH,m.i,DateSold) DateSold2, m.i
      FROM Property s
      cross join (select 0 i union  select 1 union  select 2 union  select 3 union 
                  select 4 union  select 5 union  select 6 union  select 7 union 
                  select 8 union  select 9 union  select 10 union  select 11
                  ) m        
     )sq
WHERE DateSold<= GETDATE()
GROUP BY YEAR(DateSold), MONTH(DateSold)

不确定它是否会返回所需的结果。

更新:我认为DTE是一个字段名称,您的子查询中不能引用DateSold两次,因此我更改为DateSold2,不确定您是否打算使用DATEADD()结果用于所有使用DateSold的地方,您也可以从子查询DateSold列表中删除SELECT

答案 1 :(得分:1)

试试这个:

SELECT YEAR(DateSold) AS year, 
   MONTH(DateSold) AS month,
   AVG(ROUND(Price/CONVERT(DECIMAL(10,2),FloorSQM),2)) as avg
FROM property p
GROUP BY YEAR(DateSold), MONTH(DateSold);

注意,正如您在架构中指定的那样,将查询从欧元更改为价格。

您可以获得年,月的分组,以获得该月的平均价格。你错过了聚合函数,AVG围绕你的公式(虽然如果ROUND包裹在AVG中可能更准确)。我在SQLFiddle设置了一个快速示例。