我需要从ks_data_operacji列中获取每个sp_numer的最新值。它可以工作,但问题是结果应取决于ksd_ksksub_id列。如果ksd_ksksub_id = 2,那么我想获取第二个最新值。 这是我的代码:
O(n^p)
样本数据:
s1
答案 0 :(得分:2)
您可以尝试通过CTE
窗口函数使用ROW_NUMBER
生成行号,然后通过self-join
和ksd_ksksub_id
使用rn = 1
create table temp ( sp_numer varchar(10), ks_data_operacji date,
ksd_ksksub_id int ) ;
insert into temp
values (102079,'2013-07-24',5),
(102079,'2013-10-03',6)
,(102079,'2015-11-17',2);
查询1 :
;WITH CTE AS(
SELECT *,ROW_NUMBER() OVER(PARTITION BY sp_numer order by ks_data_operacji desc) rn
FROM temp
)
SELECT t2.*
FROM CTE t1
JOIN CTE t2 on t1.rn = 1 and t1.ksd_ksksub_id = t2.rn
Results :
| sp_numer | ks_data_operacji | ksd_ksksub_id | rn |
|----------|------------------|---------------|----|
| 102079 | 2013-10-03 | 6 | 2 |
答案 1 :(得分:0)
我认为您可以将条件添加到order by
:
order by row_number() over (partition by sp_numer
order by (case when ksd_ksksub_id = 2 then 1 else 2 end),
ks_data_operacji desc
)
也就是说,将“第二”行设置为“第一”。