我有一个包含四列的表 myTable
:
id UUID,
user_id UUID ,
text VARCHAR ,
date TIMESTAMP
(id
是主键,user_id
在该表中不是唯一的)
我想检索按最新条目排序的 user_id
,我目前正在使用此查询执行此操作:
SELECT user_id FROM myTable GROUP BY user_id ORDER BY MAX(date) DESC
问题是GROUP BY
需要很长时间。有没有更快的方法来完成这个任务?我尝试使用带有 PARTITION BY 的窗口函数,如此处所述 Retrieving the last record in each group - MySQL ,但这并没有真正加快速度。我还确保 user_id
已编入索引。
我的postgres版本是10.4
编辑:我当前使用的上述查询在功能上是正确的,问题是它很慢。
最佳答案
您的查询似乎与您的要求相关:
select user_id
from mytable
group by user_id
order by max(date) desc
我建议在(user, date desc)
上建立索引以加快速度。它必须是两个列上的单个索引。
您还可以尝试distinct on
,这可能或可能不会为您带来更好的性能:
select user_id
from (
select distinct on(user_id) user_id, date
from mytable
order by user_id, date desc
) t
order by date desc
关于sql - 为每个用户选择最新条目,而不使用 group by (postgres),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63155800/