簡體   English   中英

根據與右表的匹配從左表中檢索記錄,也根據條件從右表中檢索不匹配的記錄

[英]Retrieve records from left table based on matching with right table and also non matching records from right table based on condition

我們有以下要求,請指導我如何實現這一目標。

學習桌

id      startedDate             practitioner        reference       laterality
-------------------------------------------------------------------------------
1s      2022-09-01 00:00:00     p1                  1-reference      R
2s      2022-10-01 00:00:00     p1                  1-reference      L
3s      2022-09-03 00:00:00     null                2-reference      R
4s      2022-09-03 00:00:00     null                3-reference      R
5s      2022-10-03 00:00:00     p1                  4-reference      L

觀察表

id          reference       laterality          effectiveDate         length
-------------------------------------------------------------------------------
1o         1-reference         R                2022-08-30 00:00:00    2.1
2o         1-reference         R                2022-08-01 00:00:00    2.2
3o         1-reference         R                2022-09-03 00:00:00    2.1
4o         1-reference         L                2022-08-03 00:00:00    2.0
5o         2-reference         R                2022-08-03 00:00:00    2.0
6o         2-reference         R                2022-08-01 00:00:00    2.0
7o         3-reference         R                2022-10-01 00:00:00    2.0
8o         5-reference         L                2022-10-02 00:00:00    1.9
90         5-reference         L                2022-10-03 00:00:00    2.0

Output:

如果從業者的研究表中未找到該記錄,則通過參考和側向性獲取最大有效日期記錄組,但小於 study.startedDate!=null 和最新有效日期記錄組通過參考和側向性記錄!=null

結果:

id         reference          laterality        effectiveDate          length
1o         1-reference         R                2022-08-30 00:00:00    2.1
4o         1-reference         L                2022-08-03 00:00:00    2.0
5o         2-reference         R                2022-08-03 00:00:00    2.0
7o         3-reference         R                2022-10-01 00:00:00    2.0
9o         5-reference         L                2022-10-03 00:00:00    2.0

下面的示例查詢僅獲取匹配的記錄或理解目的,但最終 output 將如上

select Obs.*
from Obs
inner join study
on Obs.reference = study.reference and Obs.effectiveDate < study.startedDate
and study.practitioner != null and Obs.laterality = study.laterality

有人可以幫我實現這個目標嗎?

謝謝

從你的描述來看,這似乎是你想要的。

您可以使用row_number()獲取具有最新effectiveDate日期的行

select *
from
(
    select Obs.*,
           rn = row_number() over (partition by Obs.reference, Obs.laterality
                                   order by Obs.effectiveDate desc)
    from   Obs
           inner join study  on Obs.reference  = study.reference 
                            and Obs.laterality = study.laterality
    where  (study.practitioner is not null and  Obs.effectiveDate < study.startedDate)
    or     (study.practitioner is null)
) o
where o.rn = 1
order by Id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM