我试图获得一组房地产数据的移动平均线,然后我可以使用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子句,这样我就可以限制发现某些种类(房屋,公寓)和区域(纽约,洛杉矶等)的属性
有人可以伸出援助之手吗?非常感谢你的帮助。
答案 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设置了一个快速示例。