首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按id对多列进行排序不同的后缀

按id对多列进行排序不同的后缀
EN

Stack Overflow用户
提问于 2016-09-14 22:15:14
回答 2查看 45关注 0票数 0
代码语言:javascript
复制
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

我想从表中选择在impressionable_id和impresssionable_type上按id降序排序的所有最后印象,并获得最后10个印象

为了进一步解释这一点

代码语言:javascript
复制
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

理想情况下,我想要这个

代码语言:javascript
复制
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知识充其量也就是一般。

我得到了

代码语言:javascript
复制
PG::GroupingError: ERROR:  column "impressions.id" must appear in the GROUP BY clause or be used in an aggregate function

有没有人能说点什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-14 22:18:50

也许这会满足你的需求:

代码语言:javascript
复制
SELECT t2.*
FROM (
    SELECT DISTINCT impressionable_id, impressionabale_type
    FROM impressions
    WHERE impressions.action_name = 'show'
) t1, LATERAL (
    SELECT *
    FROM impressions
    WHERE (t1.impressionable_id,t1.impressionabale_type) = (impressionable_id,impressionabale_type)
    ORDER BY id DESC
    LIMIT 1
) t2
ORDER BY id DESC
LIMIT 10

这将查找impressionable_idimpressionable_type的所有唯一组合,并在LATERAL子查询中查找具有最大id的行。

票数 1
EN

Stack Overflow用户

发布于 2016-09-14 23:34:03

代码语言:javascript
复制
select *
from (
    select *,
        row_number() over (
            partition by impressionable_id, impressionable_type
            order by id desc
        ) as rn
    from impressions 
    where
        user_id = 2 
        and action_name = 'show' 
        and message is not null
) s
where rn = 1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39492711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档