Postgresql 如何返回分组用户id的最近值?
如何使结果只返回每个分组用户id的最后一个条目。下面的示例 此外,任何改进查询的方法都将受到高度赞赏<代码>属性是一个hstore列Postgresql 如何返回分组用户id的最近值?,postgresql,Postgresql,如何使结果只返回每个分组用户id的最后一个条目。下面的示例 此外,任何改进查询的方法都将受到高度赞赏属性是一个hstore列 SELECT user_id, json_agg(to_json(properties -> 'following') ORDER BY id DESC) AS followings, json_agg(to_json(properties -> 'assumed_gender') ORDER BY id DESC) AS assumed_genders, j
SELECT user_id, json_agg(to_json(properties -> 'following')
ORDER BY id DESC) AS followings,
json_agg(to_json(properties -> 'assumed_gender') ORDER BY id DESC) AS assumed_genders,
json_agg(to_json(properties -> 'email') ORDER BY id DESC) AS emails,
json_agg(to_json(properties -> 'first_name') ORDER BY id DESC) AS first_names,
json_agg(to_json(properties -> 'last_name') ORDER BY id DESC) AS last_names,
json_agg(to_json(properties -> 'country_name') ORDER BY id DESC) AS country_names,
json_agg(to_json(properties -> 'city_name') ORDER BY id DESC) AS city_names,
json_agg(to_json(properties -> 'mobile_number') ORDER BY id DESC) AS mobile_numbers,
json_agg(to_json(properties -> 'submission_url') ORDER BY id DESC) AS submission_urls
FROM "daily_statistics" WHERE "daily_statistics"."campaign_id" = 72 AND "daily_statistics"."metric" = 'participation'
GROUP BY user_id ORDER BY max(id) DESC;
结果是:
user_id | followings | assumed_genders | emails | first_names | last_names | country_names | city_names | mobile_number
s | submission_urls
---------+-------------------+-----------------+---------------------------------------+--------------------+--------------------+------------------+--------------------+---------------------
---------+------------------------------------------------------------------
16 | ["false", "true"] | ["", ""] | ["lorem@lorem.com", "lorem@amet.com"] | ["dolor", "ipsum"] | ["lorem", "ipsum"] | ["amet", "amet"] | ["dolor", "ipsum"] | ["9707759365", "2572
943441"] | ["http://www.dolor.com/hgtsjcbn", "http://www.sit.com/qlnogrzd"]
(1 row)
预期结果:
user_id | followings | assumed_genders | emails | first_names | last_names | country_names | city_names | mobile_number
s | submission_urls
---------+-------------------+-----------------+---------------------------------------+--------------------+--------------------+------------------+--------------------+---------------------
---------+------------------------------------------------------------------
16 | "true" | "" | "lorem@amet.com" | "ipsum" | "ipsum" | "amet" | "ipsum" | "2572
943441" | "http://www.sit.com/qlnogrzd"
(1 row)
在
select distinct on (user_id)
user_id,
to_json(properties -> 'following') as followings,
to_json(properties -> 'assumed_gender') as assumed_genders,
to_json(properties -> 'email') as emails,
to_json(properties -> 'first_name') as first_names,
to_json(properties -> 'last_name') as last_names,
to_json(properties -> 'country_name') as country_names,
to_json(properties -> 'city_name') as city_names,
to_json(properties -> 'mobile_number') as mobile_numbers,
to_json(properties -> 'submission_url') as submission_urls
from "daily_statistics"
where
"daily_statistics"."campaign_id" = 72
and "daily_statistics"."metric" = 'participation'
order by user_id, id desc
SELECT DISTINCT ON(表达式[,…])仅保留给定表达式计算结果相等的每组行的第一行。DISTINCT ON表达式使用与ORDER BY相同的规则进行解释(见上文)。请注意,每个集合的“第一行”是不可预测的,除非使用ORDER BY来确保所需的行首先出现
这是可行的,但如果我想将其中一列(即
submissions\u url
)保留为数组而不是唯一的不同值,该怎么办?这可能吗?