我有两个看起来像这样的表:
event_ap
Event a_nr tnr date timestamp knr maschnr
PAN 123 2203 2017-01-23 21600 11 x222
PAN 132 2203 2017-01-22 21600 22 x222
PAB 123 2203 2017-01-23 28523 11 x222
PAN 555 2203 2017-01-23 14023 33 x222
PAN 555 2201 2017-01-23 21235 44 x222
PAB 222 2202 2017-01-23 21245 44 x222
PAN 666 2202 2017-01-28 35000 44 x222
PAB 666 2202 2017-01-28 35000 44 x222
pers_stm
name knr
Test1 11
Test2 22
Test3 33
Test4 44
所以我需要的是每个ID(knr)的最后一条记录。我对此的查询看起来像这样
select *
From (
select *
from ( select *
, row_number() over (partition by knr
order by date desc, timestamp desc) as RN
from event_ap
) X
where RN = 1
) Y
join pers_stm p on p.knr = Y.knr
但这有一个问题。
正如您在Table" event_ap"的示例中所见。 (最后两条记录)有完全相同的数据(包括相同的时间戳)的记录唯一差异是事件标记
所以基于我目前的查询我需要什么:
谢谢!
答案 0 :(得分:0)
在case
和date
首次排序之后,将以下timestamp
表达式添加到行号分区:
case when Event = 'PAN' then 0 else 1 end
如果两个或多个记录具有相同的日期/时间戳,则会强制PAN
个事件记录到顶部。如果日期/时间戳没有关系,则此case
表达式将不起作用,并且在 表示绑定但不存在PAN
记录的情况下,也不会产生影响。
select *
From
(
select *
from
(
select *,
row_number() over
(partition by knr order by date desc,
timestamp desc,
case when Event = 'PAN' then 0 else 1 end) as RN
from event_ap
) X
where RN = 1
) Y
join pers_stm p
on p.knr = Y.knr
答案 1 :(得分:0)
尝试将Event desc
添加到order by
的{{1}}条款中,使其成为:
over (...)
这假设你只有'PAB'和' PAN'在您的“事件”列中。如果你还有其他任何东西,那就是PAN' PAN'在降序文本排序中,蒂姆的回答是要走的路。