我有这样的查询
select distinct on (foreign_id) foreign_id, id, date
from table
where foreign_id IN (1, 2, 3)
我得到的结果
<表类>foreign_id id 日期 tbody><<tr>1 101 2019-03-20 2102 2020-02-06 3 103 2020-06-09 表类>
您缺少一个ORDER BY:
select distinct on (foreign_id) foreign_id, id, date
from table
where foreign_id IN (1, 2, 3)
order by foreign_id, date DESC;
可以这样使用解析函数:
select select foreign_id, id, date from
(select foreign_id, id, date,
row_number() over (partition by foreign_id order by date desc) as rn
from table
where foreign_id IN (1, 2, 3) ) t
where rn = 1
只添加ORDER BY
子句,因为DISTINCT ON
取有序组的第一条记录。
select distinct on (foreign_id) foreign_id, id, date
from table
where foreign_id IN (1, 2, 3)
order by foreign_id, date desc <<--- add this
您可以通过cte和row_number()实现这一点,如下所示:
with cte as (
select foreign_id,id,date, row_number()over (partition by foreign_id order by date desc) rownum
from t
)
select foreign_id,id,date from cte where rownum=1