列出每个类别的最新产品,postqresql查询

List the most up-to-date product of each category,postqresql queries

user_id product_id  category_id date_added  date_update
1              2        1           2.3.2021    null
1              3        1           2.3.2020    2.4.2023
1              4        2           2.3.2020    null
1              5        2           2.3.2020    2.4.2023
2              5        2           2.3.2020    2.4.2023
2              4        1           2.3.2020    null

列出每个类别的最新产品

您可以使用row_number()

select * from
(
select *,row_number() over(parition by userid,category_id order by date_update) as rn
from tablename
)A where rn=1

或者您也可以使用 distinct on

select distinct on (user_id,category_id) *
FROM tablename
ORDER BY user_id,category_id, date_update

List the most up-to-date product of each category

您可以使用 distinct on。让我假设如果更新日期为空,那么您想要创建日期:

select distinct on (category_id) t.*
from t
order by category_id, coalesce(date_update, date_added) desc;

如果您想要每个 user/category 组合,逻辑将是:

select distinct on (user_id, category_id) t.*
from t
order by user_id, category_id, coalesce(date_update, date_added) desc;

使用Window函数

select u_id,c_id, p_id, coalesce (date_update, date_added) as date ,
rank () over (partition by u_id, c_id order by coalesce (date_update, date_added) desc) as r
from inventory
) t where r = 1