我有房子/房地产列表以及经纬度的数据集。我想比较价格(出售和租赁)与邻近的上市,并能够看到一个平均类似的房子在说1英里半径。
我想我需要运行一个循环或光标?
我正在运行ms sql 2019。
这就是我迄今为止所尝试的:
列表(简化):
列表\u id(nvarchar)
经度(浮动)
纬度(浮动)
卧室数量(内景)
价格(国际)
租售(nvarchar)
地理位置
我已经根据经度和纬度列填充了地理位置列。
我可以使用下面的代码在1公里内获得列表,这很好(在我手动设置经纬度之后)
DECLARE @Latitude float
DECLARE @Longitude float
DECLARE @point geography
DECLARE @distance int = 1000;
SET @Latitude = XX
SET @Longitude = XX
SET @point = geography::Point(@Latitude, @Longitude, 4326);
SELECT listing_id, price from Listings WHERE @point.STDistance([GeoLocation]) <= @distance
AND status = 'to_rent'
我要做的是遍历listings表中的所有列表,将给定距离内的属性带回,并将其存储到可比较表中,然后在该表中运行平均值/其他计算
可比表:
列表\u id(nvarchar)
其他清单id(nvarchar)
其他挂牌价格(国际)
其他价格类型(nvarchar)
其他距离(int)
我想我需要遍历listings表中的所有项来构建这个?
我正在尝试下面的代码来执行循环-但是运行起来需要很长时间,而且这不需要运行距离查询,只需要循环所有行(目前30分钟仍未完成)
listings表当前包含大约10k行。
我是在正确的轨道上,还是有更好的方法来运行这个?
DECLARE @CursorTestID INT = 1;
DECLARE @RunningTotal BIGINT = 0;
DECLARE @RowCnt BIGINT = 0;
-- get a count of total rows to process
SELECT @RowCnt = COUNT(0) FROM Listings
WHILE @CursorTestID <= @RowCnt
BEGIN
SELECT Listing_ID
FROM (
SELECT Listing_ID, ROW_NUMBER() OVER (ORDER BY Listing_ID) AS RowNum
FROM Listings
) AS MyDerivedTable
WHERE MyDerivedTable.RowNum = @CursorTestID
SET @CursorTestID = @CursorTestID + 1
END
1条答案
按热度按时间6qqygrtg1#
你不需要循环。在sql中应该避免循环。只需使用一个简单的连接:
例如