SQL에 익숙하지 않으므로 표기법을 어기십시오. 내 문제의 훨씬 단순화 된 버전은 다음과 같습니다. 나는 테이블 입학에 입원을 가지고 테이블에서 특정 유형의 가장 최근의 외래 주장은 입학 날짜 이전를 청구 등 수집해야합니다SQL 조인 : 원래 테이블에서 조건을 만족하는 마지막 레코드 선택
SELECT a.ID , a.date, b.claim_date
FROM admissions as a
LEFT JOIN claims b on (a.ID=b.ID) and (a.date>b.claim_date)
LEFT JOIN claims c on ((a.ID=c.ID) and (a.date>c.claim_date))
and (b.claim_date<c.claim_date or b.claim_date=c.claim_date and b.ID<c.ID)
WHERE c.ID is NULL
문제는 일부 ID에 대해 나는 많은 기록을 얻을 수 있다는 것입니다 a.date, c.claim_date 값을 복제하십시오.
내 문제는 여기
SQL join: selecting the last records in a one-to-many relationship
논의 하나와 유사한 여기
SQL Left join: selecting the last records in a one-to-many relationship
그러나에 정교 발생 된 청구 범위에 기록 만보고의 추가 주름이있다 전에 a.date하고 나는 그 문제를 일으키는 것 같아요.
업데이트
타임즈 그냥 날짜, 그리고 환자가 같은 날에 여러 레코드를 가질 수 있기 때문에,이 문제입니다, 저장되지 않습니다. 또 다른 주름이 있습니다. 클레임의 하위 집합 만보고 싶다는 것입니다 (claim.flag = TRUE라고 가정 해 봅시다). 여기에 내가 마지막 시도 내용은 다음과 같습니다
SELECT a.ID , a.date, b.claim_date
FROM admissions as a
LEFT JOIN (
select d.ID , max(d.claim_date) cdate
from claims as d
where d.flag=TRUE
group by d.ID
) as b on (a.ID=b.ID) and (b.claim_date < a.date)
LEFT JOIN claims c on ((a.ID=c.ID) and (c.claim_date < a.claim_date))
and c.flag=TRUE
and (b.claim_date<c.claim_date or b.claim_date=c.claim_date and b.ID<c.ID)
WHERE c.ID is NULL
그러나,이 (일반적으로 LIMIT 10로 약 30 분 소요) 중단하기 전에 몇 시간 달렸다.
이를 유망 해 보이지만, 나는 ID가 존재하지 않는다는 오류를 얻었습니다 .C.id가 외래 키가 아니기 때문에 나는 생각합니다. – Jeph
또한 동일한 날짜에 일반적으로 여러 개의 클레임이 있으며 중복으로 이어질 것이라고 생각합니다. 나는 마지막 날짜 뿐이야. – Jeph
데이터베이스 테이블과 데이터베이스 테이블의 관계에 대한 정확한 설명이 없으면 적절한 조인/관계가있는 쿼리를 작성하기가 어려울 수 있습니다. 입학/소유권 주장 테이블에 대한 자세한 정보를 제공 할 수있는 기회가 있습니까? – MeyerRJ