在 DB2 中仅使用 IN 操作获取第一行

Fetch first row only with IN operation in DB2

如何将 "fetch first row only" 与 "in" 运算符结合使用?像

select user_id, item_name as last_item_name 
from sale 
where user_id in (1,2) 
order by date desc 
fetch first row only

我希望它成为 return 每个人最后一次购买的商品? 例如:运行

上的查询
--------------------------------
id | user_id | item_name| date |
1  | 1       | pen      | 01/01|
2  | 1       | book     | 02/01|
3  | 2       | book     | 01/01|
4  | 2       | computer | 02/01|
--------------------------------

应该return

user_id | last_item_name|
1       | book          |
2       | computer      |
-------------------------

谢谢!

所以你想要每个用户最新的?使用 ROW_NUMBER() :

SELECT * FROM (
    SELECT t.*,
           ROW_NUMBER() OVER(PARTITION BY t.user_id ORDER BY t.date DESC) as rnk
    FROM sale t
    WHERE t.user_id IN(1,2)) s
WHERE s.rnk = 1

解决方案 1

with uniquserid as (
select distinct user_id from sale 
)
select f1.user_id , f3.item_name 
from uniquserid f1
inner join lateral 
(
select * from sale f2
where f1.user_id =f2.user_id 
ORDER BY f2.date DESC
fetch first rows only 
) f3 on 1=1

解决方案 2

select f1.user_id , f3.item_name 
from 
(select distinct user_id from sale) f1
inner join lateral 
(
select * from sale f2
where f1.user_id =f2.user_id
ORDER BY f2.date DESC
fetch first rows only 
) f3 on 1=1

解决方案 3

 with uniquserid as (
 select distinct user_id from sale 
 )
 select f1.user_id , (select f2.item_name from sale f2 where f1.user_id =f2.user_id ORDER BY f2.date DESC
 fetch first rows only) as item_name 
 from uniquserid f1

解决方案 4

select f1.user_id , (select f2.item_name from sale f2 where f1.user_id =f2.user_id ORDER BY f2.date DESC
fetch first rows only) as item_name 
from (select distinct user_id from sale) f1