【发布时间】:2016-09-14 14:15:14
【问题描述】:
SELECT impressions.*
FROM impressions
WHERE impressions.user_id = 2
AND impressions.action_name = 'show'
AND (impressions.message IS NOT NULL)
GROUP BY impressionable_id, impressionable_type
我想从表格中选择所有在 impressable_id 和 impresssionable_type 上唯一的最后展示次数,按 id 降序排列并获得最后 10 个
进一步解释这一点
id, impressionabale_type, impressionable_id, action_name
50012, assignment, 2, show
50011, assignment, 1, show
50010, person, 1, show
50009, assignment, 1, show
50008, person, 5, show
50007, person, 4, show
50006, person, 3, show
50005, person, 1, show
50004, person, 1, show
50003, person, 2, show
50002, person, 2, show
50001, person, 1, show
50000, person, 1, show
理想情况下我想要这个
50012, assignment, 2, show
50011, assignment, 1, show
50010, person, 1, show
50008, person, 5, show
50007, person, 4, show
50006, person, 3, show
50003, person, 2, show
我尝试过 distinct 和 group by,但我的 sql 知识充其量是公平的。
我明白了
PG::GroupingError: ERROR: column "impressions.id" must appear in the GROUP BY clause or be used in an aggregate function
谁能给点启示
【问题讨论】:
-
你有一些样本数据吗?也许还有一些想要的输出?
标签: sql postgresql greatest-n-per-group distinct-on