2011-01-10 24 views
1

この関数を使用して、30マイル以内のイベントを取得します。そのイベントは、巨大なディナー1とほぼ同じです。しかし、どうすればそれらを「最も近い」ものにすることができますか?SQL関数と距離の間の距離が最も近い

ALTER FUNCTION [dbo].[NearestEvents] 
    ( 
    @lat real, 
    @long real 
) 
RETURNS TABLE 
AS 
    RETURN 
    SELECT Events.ID 
    FROM Events 
    WHERE dbo.DistanceBetween(@lat, @long, Latitude, Longitude) <30 
+0

同じ結果が欲しいが、クローゼットで注文したい場合は、おそらく、DistanceBetween列を含む一時テーブルにデータを格納してから、選択する必要があります結果はDistanceBetween列に表示されます。間には距離が計算されているので、余分な作業です。 – Zachary

答えて

3

選択リストに追加します。

SELECT Events.ID, 
    dbo.DistanceBetween(@lat, @long, Latitude, Longitude) as distance 
    FROM Events 
    WHERE dbo.DistanceBetween(@lat, @long, Latitude, Longitude) <30 
    ORDER BY distance 

- まだOPのためには機能していないので、ストアドプロシージャをデバッグするには、パラメータをハイジャックすることです。

DECLARE @lat = varchar(100); 
DECLARE @long = vavhar(100); 

SET @lat = 'XXXXX'; 
SET @long = 'XXXXX'; 

SELECT Events.ID, 
     dbo.DistanceBetween(@lat, @long, Latitude, Longitude) as distance 
     FROM Events 
     WHERE dbo.DistanceBetween(@lat, @long, Latitude, Longitude) <30 
     ORDER BY distance; 
+0

これは動作していません.. – raklos

+1

クエリーがありません: 'Events.ID、dbo.DistanceBetween(...' –

+0

はコンマを追加しました – Yada