为postgres中的每个用户选择项目的最后一项

时间:2017-08-08 13:41:45

标签: postgresql

我想获得每个用户的最后一个条目,但customer_id是一个哈希' ASAG#...' customer_id的订单会破坏查询。还有其他选择吗?

Select Distinct On (l.customer_id)
     l.customer_id
    ,l.created_at
    ,l.text
From likes l
Order By l.customer_id, l.created_at Desc

1 个答案:

答案 0 :(得分:2)

您当前的查询似乎已经正常运行,q.v。这里:

Demo

我不知道为什么您当前的查询没有产生您期望的结果。对于每个客户,它应该返回一个不同的记录,对应于最近的一个,给出ForEach ($noteProperty in $NetworkInfo.PSObject.Properties) { Write-Host $noteProperty.Name Write-Host $noteProperty.Value } 声明。

在任何情况下,如果它没有做你想要的,那么另一种方法是在这里使用ORDER BY和用户分区。内部查询为每个用户分配行号,值ROW_NUMBER()将转到每个用户的最新记录。然后外部查询仅保留最新记录。

1

要加快使用SELECT t.customer_id, t.created_at, t.text FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY created_at DESC) rn FROM likes ) t WHERE t.rn = 1 的内部查询,您可以尝试在ROW_NUMBER()customer_id列上添加综合索引:

created_at