答案 0 :(得分:1)
最简单的方法是使用row_number
函数。
select p.name,t.amount as latest_price
from (select p.*, row_number() over(partition by product_id order by create_date desc) as rn
from prices p) t
join products p on p.id = t.product_id
where rn = 1
答案 1 :(得分:1)
在PostgreSQL中,您可以尝试DISTINCT ON
只按降序"createModel": function(modelName, callback) {
app.models.modelName.create(self.modelName(), function(error, modelInstance) {
if(!error){
callback(null, modelInstance.id);
}
});
}
顺序获取每个产品ID的第一行;
create_date
(当然,除了说明目的,你当然应该选择你需要的确切列)
答案 2 :(得分:0)
虽然 DISTINCT ON
的答案对我的实例有效,但我发现有一种更快的方法可以让我得到我需要的东西。
SELECT DISTINCT ON(u.id) u.id, (CAST(data AS JSON) ->> 'Finished') AS Finished, ee.post_value
FROM users_user u
JOIN events_event ee on u.id = ee.actor_id
WHERE u.id > 20000
ORDER BY u.id DESC, ee.time DESC
;
我的数据库需要大约 25 秒,而
SELECT u.id, (CAST(data AS JSON) ->> 'Finished') AS Finished, e.post_value
FROM users_user u
JOIN events_event e on u.id = e.actor_id
LEFT JOIN events_event ee on ee.actor_id = e.actor_id AND ee.time > e.time
WHERE u.id > 20000 AND ee.id IS NULL
ORDER BY u.id DESC
;
大约需要 15 秒。