2009-12-20 4 views
0

마지막 질문에 도움을 주신 모든 분들께 감사드립니다. 이것은 비슷한 질문이지만, 이제는 내가 원하는 것을 더 잘 알 수 있습니다. 다시 MS SQL Server 2008을 사용하고 있으며 SQL 경험이 조금 부족한 쿼리를 찾으려고합니다.SQL Server 2008 : 여러 열을 기반으로 중복 행 필터링

이 지금 나는이 표에서 다음과 같은 간단한 쿼리

SELECT pl.val, pl.txt_val, pl.id 
FROM dm.labs pl 
    WHERE pl.lab_nm = 'CK (CPK)' 
    AND pl.val < 999999; 
    AND pl.val IS NOT NULL 
ORDER BY pl.val; 

을 가지고, 각 행은 환자의 실험실 값의 결과에 해당한다. 문제는 일부 환자의 경우 동일한 실험실 독서의 사본이 실제로있는 행이 있다는 것입니다. 실험실 날짜를 제공하는 열 pl.lab_filed_dts (datetime 데이터 형식)이 있습니다.

내가하고 싶은 것입니다 :

편집 : 두 개 이상의 행이 다른 컬럼에 관계없이 동일한 값 id 같은 val, 같은 lab_filed_dts을 가지고 있다면, 행 중 하나에서만 val, txt_valid을 반환하려는 경우 (어느 쪽이든 상관 없습니다).

편집 : 두 개의 행이 동일한 id 같은 val, 같은 날 부분 (그러나 반드시 시간) lab_filed_dts의 그 중 하나에 대한 lab_filed_dts의 시간 부분이있는 경우은 자정, 나는 돌아가려면 val, txt_validlab_filed_dts 시간이 자정이 아닌 행의 행입니다.

모두의 도움에 다시 한번 감사드립니다.

+0

두 개 (또는 그 이상)의 행이있을 때 선택할 txt_val을 어떻게 결정합니까? – lins314159

+0

이 테이블에 기본 키가 있습니까? –

+0

Tom : 기본 키 'lab_id'가 있습니다. Lins : 귀하의 질문을 이해할 수 없거나 SELECT 작동 방식을 이해할 수 없습니다. 내가 말하고자했던 것은 : 두 개 (또는 그 이상)의 행이 다른 열의 값과 상관없이 동일한'id', 동일한'val' 및 동일한'lab_filed_dts'를 갖는다면' val','txt_val', 그리고'id'만으로 행 중 하나 (그것은 어느 것이 든 상관 없습니다)에서. 이 모든 도움이됩니까? – raoulcousins

답변

1

내가 제대로 질문을 이해한다면 :

SELECT pl.val, pl.txt_val, pl.id 
FROM dm.labs pl 
    WHERE pl.lab_nm = 'CK (CPK)' 
    AND pl.val < 999999; 
    AND pl.val IS NOT NULL 
GROUP BY pl.val, pl.txt_val, pl.id, cast(lab_filed_dts as date) 
HAVING lab_filed_dts = max(lab_filed_dts) 
ORDER BY pl.val; 

/* 당신이 select에없는 컬럼에 주문할 수없고 내가 그냥 유형이었다 가정으로 pl.valpl.vak를 변경 */

+0

@jmoreno : 내가 귀하의 게시물을 편집 했어도 괜찮 았으면 좋겠어요. 한 블럭의 각 줄을 네 칸 씩 들여 쓰면 좋은 서식을 얻을 수 있습니다. – jason

+0

나는 이것이 효과가 있다고 생각하지 않는다. 두 실험실의 txt_val 값이 다른 경우 중요한 열이 동일해도 두 실험실 모두 결과에 나타납니다. –

+0

또 다른 문제는 'HAVING lab_filed_dts = max (lab_filed_dts)'를 사용하면 각 환자에 대해 가장 최근의 CK 실험실 만 얻는 것입니다. 환자는 시간이 지남에 따라 여러 실험실을 수행했으며 모든 실험실 결과를보고 싶습니다. 내가 제거하려고하는 것은 단일 실험실 값의 여러 복사본 인 테이블의 행입니다. 즉, 환자의 판독 값은 한 번 찍었지만 간호사는 결과를 데이터 레코드에 두 번 입력했습니다. – raoulcousins

관련 문제