add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
CREATE TABLE Facility (
"Id" INTEGER,
"Lat" FLOAT,
"Long" FLOAT,
"Resource1" INTEGER,
"Resource2" INTEGER
);

INSERT INTO Facility
("Id", "Lat", "Long", "Resource1", "Resource2")
VALUES
('1', '50.123', '4.23', '5', '12'),
('2', '61.234', '5.34', '0', '9'),
('3', '50.634', '4.67', '21', '18');
3 rows affected
DECLARE @latQuery float = 50.634,
@LongQuery float = 4.67,
@res1Query int = 10,
@res2Query int = 20;

DECLARE @origin geography = geography::Point(@latQuery, @LongQuery, 4326);

SELECT
f.Id,
f.Lat,
f.Long,
f.Resource1,
f.Resource2
FROM (
SELECT f.*,
SumRes1 = SUM(f.Resource1) OVER (ORDER BY v1.Distance ROWS UNBOUNDED PRECEDING) - f.Resource1,
SumRes2 = SUM(f.Resource2) OVER (ORDER BY v1.Distance ROWS UNBOUNDED PRECEDING) - f.Resource2
FROM Facility f
CROSS APPLY (VALUES(
@origin.STDistance(geography::Point(f.Lat, f.Long, 4326))
)) v1(Distance)
) f
WHERE (
f.SumRes1 < @res1Query
OR f.SumRes2 < @res2Query
);
Id Lat Long Resource1 Resource2
3 50.634 4.67 21 18
1 50.123 4.23 5 12