2013-09-03 5 views
0

У меня есть запрос, который извлекает информацию из других таблиц, созданных в запросе. Мой окончательный вывод из окончательного выбора из заявления выглядит следующим образом:Выберите отдельную строку на основе максимального значения другого столбца SQL Server 2008 R2

VISIT_ID | MRN | DAYS SCORE | IP SCORE | ER SCORE | CC SCORE | TOTAL 
123456 | 123 | 3   | 3  | 2  | 0  | 8 
123456 | 123 | 3   | 3  | 2  | 2  | 10 
123456 | 123 | 3   | 3  | 2  | 4  | 12 
... 

То, что я хотел бы сделать, это просто получить строку с MAX (TOTAL), в этом случае строку с TOTAL = 12

Я посмотрел на это post, но, похоже, все не так. Я также посмотрел here.

Вот запрос, который производит результаты:

-- @LACE_MSTR TABLE DECLARATION ###################################// 
DECLARE @LACE_MSTR TABLE(
MRN VARCHAR(200) 
, VISIT_ID VARCHAR(200) 
, [LACE DAYS SCORE] INT 
, [LACE ACUTE IP SCORE] INT 
, [LACE ER SCORE] INT 
, [LACE COMORBID SCORE] INT 
) 
--###################################################################// 
INSERT INTO @LACE_MSTR 
SELECT 
Q1.MRN 
, Q1.ENCOUNTER_ID 
, Q1.[LACE DAYS SCORE] 
, Q1.[ACUTE ADMIT SCORE] 
, CASE 
    WHEN Q1.VISIT_COUNT IS NULL THEN 0 
    WHEN Q1.VISIT_COUNT = 1 THEN 1 
    WHEN Q1.VISIT_COUNT = 2 THEN 2 
    WHEN Q1.VISIT_COUNT = 3 THEN 3 
    WHEN Q1.VISIT_COUNT >= 4 THEN 4 
    ELSE 0 
    END AS [LACE ER SCORE] 
, Q1.[CC LACE SCORE] 

FROM 
    (
    SELECT 
    DISTINCT T1.ENCOUNTER_ID 
    , T1.MRN 
    , T1.[LACE DAYS SCORE] 
    , T1.[ACUTE ADMIT SCORE] 
    , CNT.VISIT_COUNT 
    , CM.[CC LACE SCORE] 

    FROM @T1 T1 
    LEFT OUTER JOIN @CNT CNT 
    ON T1.MRN = CNT.MRN 
    JOIN @CM CM 
    ON CM.[MRN CM] = T1.[MRN] 
    ) Q1 

SELECT DISTINCT VISIT_ID 
, MRN 
, [LACE DAYS SCORE] 
, [LACE ACUTE IP SCORE] 
, [LACE ER SCORE] 
, [LACE COMORBID SCORE] 
, [LACE DAYS SCORE]+[LACE ACUTE IP SCORE]+[LACE ER SCORE]+[LACE COMORBID SCORE] AS [TOTAL LACE] 

FROM @LACE_MSTR 
Tried this but I did not do it right therefore it does not work 
--INNER JOIN 
-- (
-- SELECT VISIT_ID 
-- , MAX([LACE DAYS SCORE]+[LACE ACUTE IP SCORE]+[LACE ER SCORE]+[LACE COMORBID SCORE]) AS [TOTAL LACE] 
-- FROM @LACE_MSTR 
-- GROUP BY VISIT_ID 
-- ) GROUPEDLACE_MSTR ON @LACE_MSTR.VISIT_ID=GROUPEDLACE_MSTR.VISIT_ID 
-- AND @LACE_MSTR.[TOTAL LACE SCORE] = [email protected]_MSTR.[TOTAL LACE] 

GROUP BY VISIT_ID 
, MRN 
, [LACE DAYS SCORE] 
, [LACE ACUTE IP SCORE] 
, [LACE ER SCORE] 
, [LACE COMORBID SCORE] 

Пожалуйста, дайте мне знать, если есть необходимость в разъяснении.

Спасибо,

+0

Какова фактическая группировка по (например, что диктует дубликат), 'VISIT_ID + MRN'? –

+0

Дубликат исходит из отдельного запроса. Он очень длинный, но из этого запроса я также сначала группируюсь на 'VISIT_ID' –

ответ

1

Предполагая, что группировка должна быть основана на VISIT_ID и MRN:

;WITH x AS 
(
    SELECT VISIT_ID, MRN, ... etc ..., 
    rn = ROW_NUMBER() OVER (PARTITION BY VISIT_ID, MRN 
     ORDER BY [LACE DAYS SCORE] + [LACE ACUTE IP SCORE] 
     + [LACE ER SCORE] + [LACE COMORBID SCORE] DESC) 
    FROM @LACE_MSTR 
) 
SELECT VISIT_ID, MRN, ... etc ... 
FROM x WHERE rn = 1; 
+0

Спасибо @Aaron. Я дам эту попытку по утрам, теперь нужно выходить часы. –

+0

работал как шарм –

Смежные вопросы