엔티티의 고유 한 이름을 포함하는 identifier
이라는 varchar()
필드가있는 테이블이 있습니다.주어진 문자열 값 "주위에"행을 검색하려면 어떻게해야합니까?
나는 테이블을 검색하고 해당 식별자의 양쪽에 주어진 식별자가 및 인 행을 찾으려고합니다. 알파벳순으로 정렬됩니다 (즉, 검색된 식별자와 측면).
SQL Server 2005에서이를 공식화하는 가장 좋은 방법은 무엇입니까? 나는 이것을 할 수있는 어떤 마법이 있다고 생각하지만, 이런 종류의 일을하기위한 어떤 go-by 쿼리도 찾지 못하고있다. 지금까지 얻을 수
이것은 가까운이지만, 성능은 끔찍한입니다 :
WITH
allrows AS (
SELECT *, ROW_NUMBER() OVER(ORDER BY identifier DESC) AS RN
FROM mytable
),
centerrow AS (
SELECT RN AS CRN FROM allrows WHERE identifier = 'MyValue'
)
SELECT * FROM allrows, centerrow
WHERE RN BETWEEN (centerrow.CRN - 10) AND (centerrow.CRN + 10)
표는 2 백만 기록을 가지고 있으며, 식별자 필드는 한 1000 자 등이 될 수 있습니다.
UNION을 고려하지 않았지만, 내 머리가 단일 SELECT 내에서 그것을 시도하는 데 막혔습니다. 최종 결과 집합을 정렬 처리하기 때문에 다른 유사한 것에 비해이 대답을 선택했습니다. – richardtallent
이게 더 "컴파일러 친화적 인"이유는 무엇입니까? 나는 정렬 요구 사항을 놓쳤다. 그러나 나는 이것이 "컴파일러 친화적 인"방식으로 어떻게 다른지를 볼 수 없다. 사실, 정렬 요구 사항을 추가하는 것 이외에도 copypasta가있을 수 있습니다. –
@ PittsburghDBA 귀하의 스크립트가 컴파일되지 않습니다. 그러나 스크립트는 그대로 유효하지 않습니다. –