我一直在尝试根据时间从我的查询结果中删除重复项,但我需要考虑 3 个不同的时间,我不知道该怎么做。由于某些测试多次发生,part_id 上存在重复项,我只想从所有 3 个表中获得最后一次测试的结果。
我现在正在运行这个查询
select lb.request_ky,
lb.build_dm,
lb.part_id,
dv.date_test,
dv.result,
dw.date_test,
dw.result,
tt.date_test,
tt.result
From tableA lb,
tableB dv,
tableC dw,
tableD tt
Where lb.part_id = dv.part_id
And lb.part_id = dw.part_id
And lb.part_id = tt.part_id
Run Code Online (Sandbox Code Playgroud)
这个查询会给我部分 id 的重复项。我怎样才能从每个表中获取最新结果并将它们连接在一起?
您必须首先定义如何识别“测试”以及“最新”是什么。哪些列标识测试,哪些日期列将用于排序?
然后,编写查询的一种方法是使用窗口函数:
With cte As
( Select
lb.request_ky,
lb.build_dm,
lb.part_id,
dv.date_test As date_test1,
dv.result As result1,
dw.date_test As date_test2,
dw.result As result2,
tt.date_test As date_test3,
tt.result As result3,
Row_number() Over (Partition By -- pick a column for the
lb.part_id -- identification
Order By -- and another for the
dv.date_test Desc) -- order
As rn
From
tableA lb
Join tableB dv
On lb.part_id = dv.part_id
Join tableC dw
On lb.part_id = dw.part_id
Join tableD tt
On lb.part_id = tt.part_id
)
Select
request_ky,
build_dm,
part_id,
date_test1,
result1,
date_test2,
result2,
date_test3,
result3
From
cte
Where
rn = 1 ;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5986 次 |
最近记录: |