![](/img/trans.png)
[英]SQL Server - Return all records from LEFT table and only non matching records from right table
[英]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
如果從業者的研究表中未找到該記錄,則通過參考和側向性獲取最大有效日期記錄組,但小於 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.