하지만이 개 긴급 기록이 서로 옆에 발생하면 다른 답이 정답을 반환하지 않습니다 내게 도청 : 의사 코드 솔루션은 다음과 유사합니다. 첫 번째 기록은 2 개의 비상 사태 사이에 비 긴급 기록이 없기 때문에 2 번째 기록을 null 대신 잘못 표시합니다. 이 쿼리를 찾다가 다른 쿼리를 찾았으므로 다른 사람들이이 문제를 발견했을 때를 대비하여 업데이트를 제공하고 싶었습니다.
아래 쿼리는 CROSS APPLY
및 ROW_NUMBER
대신 OUTER APPLY
을 사용하여 바로 다음 서비스를 제공합니다.
DECLARE @S TABLE (
[Service] NVARCHAR(40),
[DateTimeIn] DATETIME,
[PatientId] INT
)
INSERT @S
SELECT 'H EMERGENCY MEDICINE', '2013-01-01 10:43:00.000', 1
UNION ALL SELECT 'H MEDICINE E', '2013-01-06 23:43:00.000', 1
UNION ALL SELECT 'H MEDICINE E', '2013-01-07 17:18:00.000', 1
UNION ALL SELECT 'H MEDICINE ICU', '2013-01-01 15:38:00.000', 1
UNION ALL SELECT 'H EMERGENCY MEDICINE', '2013-01-07 1:41:00.000', 1
UNION ALL SELECT 'H EMERGENCY MEDICINE', '2013-01-07 1:43:00.000', 1
UNION ALL SELECT 'H MEDICINE ICU', '2013-01-07 00:49:00.000', 1
UNION ALL SELECT 'H MEDICINE ICU', '2013-01-08 04:36:00.000', 1
DECLARE @PatientId INT = 1
;WITH CTE AS (
SELECT *,
CASE WHEN S.Service = 'H EMERGENCY MEDICINE' THEN 1 ELSE 0 END AS IsEmergency,
ROW_NUMBER() OVER (ORDER BY DateTimeIn) AS RowNum
FROM @S S
WHERE S.PatientId = @PatientId
)
SELECT
E.Service,
E.DateTimeIn,
N.NextService,
N.NextDateTimeIn
FROM CTE E
OUTER APPLY (
SELECT TOP 1
Service AS NextService,
DateTimeIn AS NextDateTimeIn
FROM CTE
WHERE IsEmergency = 0
AND RowNum = E.RowNum + 1
) N
WHERE IsEmergency = 1
이 다음 출력됩니다
Service DateTimeIn NextService NextDateTimeIn
------------------------- ----------------------- ------------------------- -----------------------
H EMERGENCY MEDICINE 2013-01-01 10:43:00.000 H MEDICINE ICU 2013-01-01 15:38:00.000
H EMERGENCY MEDICINE 2013-01-07 01:41:00.000 NULL NULL
H EMERGENCY MEDICINE 2013-01-07 01:43:00.000 H MEDICINE E 2013-01-07 17:18:00.000
이 질문에 대답 할 수있는 사용자의 주목을 받고 확률을 높이려면 [편집] 그와는 해당 언어 [태그] (HTTP를 추가해야 : //stackoverflow.com/help/tagging). 나는 이것이 SQL이라고 추측 할 것입니다. 그렇다면 사용중인 SQL DB를 나타내는 태그를 추가하십시오. – Dukeling
환자는 여러 개의 "H 비상 의학"항목을 가질 수 있습니까? 그렇다면 검색 할 결과는 무엇입니까? –
질문을 파기하지 마십시오. 유효한 이유가 삭제되어야 할 경우, 게시물을 중재자주의를 위해 플래그를 지정하거나 페이지 하단의 연락처 링크를 사용하십시오. – theB