我是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
然而闡述,還有的只是在發生索賠尋找記錄添加皺紋之前和之後,我認爲這是造成這個問題。
更新
時間不存儲,有日期,而且由於病人能在同一天有多個記錄,這是一個問題。還有另一個皺紋,那就是我只想看看CLAIMS的一個子集(比如說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
然而,這跑了幾個小時之前中止(通常需要大約30分鐘與10 LIMIT)。
這看起來很有希望,但我得到一個錯誤,a.ID不存在。我想因爲c.id不是外鍵? – Jeph
此外,通常在同一天有多個聲明,我認爲這會導致重複。我只是最後一次約會。 – Jeph
如果沒有數據庫表及其關係的準確描述,那麼使用適當的連接/關係編寫查詢將會很困難。你有沒有可能提供更多關於招生/索賠表的細節? – MeyerRJ