Ответ 1
Я считаю, что это может сработать. Кажется, это доставляет ваши тестовые данные. Немного грубо. Некоторые из SELECT MIN и SELECT MAX, возможно, могут быть рассчитаны заранее, если ваши реальные данные велики.
SELECT *
-- uncomment this to delete the desired points
-- DELETE #temp
FROM #temp t
WHERE
(
-- Internal points
(
( X > (SELECT MIN(X) FROM #temp) AND X < (SELECT MAX(X) FROM #temp) )
AND ( Y > (SELECT MIN(Y) FROM #temp) AND Y < (SELECT MAX(Y) FROM #temp) )
)
-- Exceptions (points with nothing strictly outside them) [Don't want to lose (1,1)]
AND EXISTS (SELECT * FROM #temp WHERE X > t.X AND Y > t.Y)
)
OR
-- redundant edge points [(0,1) would be included as an "exception"]
(
( (t.X = (SELECT MIN(X) FROM #temp) OR t.X = (SELECT MAX(X) FROM #temp))
AND EXISTS (SELECT * FROM #temp WHERE X = t.X AND Y > t.Y)
AND EXISTS (SELECT * FROM #temp WHERE X = t.X AND Y < t.Y) )
OR
( (t.Y = (SELECT MIN(Y) FROM #temp) OR t.Y = (SELECT MAX(Y) FROM #temp))
AND EXISTS (SELECT * FROM #temp WHERE Y = t.Y AND X > t.X)
AND EXISTS (SELECT * FROM #temp WHERE Y = t.Y AND X < t.X) )
)