Sql 分组依据与订单依据查询问题

Sql 分组依据与订单依据查询问题,sql,postgresql,group-by,Sql,Postgresql,Group By,我有活动表和样本数据,如 我需要通过在活动\u类型\u id 3的描述处创建的\u获取不同的联系人\u 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活动,其

我有活动表和样本数据,如

我需要通过在活动\u类型\u id 3的描述处创建的\u获取不同的联系人\u 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活动,其中活动类型id=3订单由在创建时创建

我解决了这类错误并尝试了查询,但结果并不像我预期的那样

按联系人分组\u id和在desc创建的按订单分组\u未给出正确的结果

像上面一样,我尝试了分组方式、排序方式、不同的查询组合等

请推荐我

我想从上面的数据中得到如下的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
基本上所有唯一的联系人id订单都是由desc order创建的

谢谢,您需要指定您关心的联系人id,因为您有多行

使用
select distinct
时,
order by
子句中只有
select
中的列可用

因此,使用
groupby
orderby
如下:

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;
这个怎么样

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

选择contact_id,min(created_at)作为从活动中创建的活动,其中活动类型=3按联系人分组\u id order by created_at desc limit 40 offset 0
按订单在此处是否起作用而不包括最大值?