在 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
如何将 "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