我有活动表和样本数据,如
我需要通过activity_type_id 3的created_at desc获取不同的contact_id顺序
我试过了
select distinct contact_id
from activities
where activity_type_id = 3 order by created_at desc limit 40 offset 0
然后postgres给出错误,如
错误:对于SELECT DISTINCT,ORDER BY表达式必须出现在选择列表中 第1行:... om活动,其中activity_type_id = 3 order by created_at ...
我解决了这种错误并尝试了查询,但结果却没有达到预期效果。
按contact_id分组,create_at desc命令没有给出正确的结果。
像上面一样,我试过,分组,排序,不同等等的查询组合。请建议我。
我想从上面的数据中得到如下的O / P
id | contact_id | activity_type_id | created_at
-------+------------+------------------+---------------------
718006 | 45816 | 3 | 2016-10-03 12:29:57
718005 | 45153 | 3 | 2016-10-03 12:27:01
718204 | 3491 | 3 | 2016-10-03 12:25:14
718186 | 42393 | 3 | 2016-10-03 12:23:00
718172 | 26867 | 3 | 2016-10-03 12:21:07
718171 | 45954 | 3 | 2016-10-03 12:20:09
基本上所有唯一的contact_id顺序由created_at desc命令。
谢谢
答案 0 :(得分:2)
您需要指定您关心的联系人ID - 因为您有多行。
使用select distinct
时,select
条款中只有order by
中的列可用。
因此,请像这样使用group by
和order by
:
select a.contact_id
from activities a
where a.activity_type_id = 3
group by a.contact_id
order by max(a.created_at) desc
limit 40 offset 0;
答案 1 :(得分:2)
这个怎么样?
SELECT contact_id, MAX(created_at) AS CreatedAt
FROM activities
WHERE activity_type_id = 3
GROUP BY contact_id
ORDER BY CreatedAt DESC
limit 40 offset 0