我有一个通知模态框和一个用户模态框,其中用户有许多通知,这些通知是在用户之间发送的。我需要一个函数来获取每个用户的最新通知,并按时间戳排序返回它们。
我尝试使用SELECT DISTINCT .. ORDER BY:
我返回了所有消息的列表,而不仅限于每个发件人最新的消息。
我尝试使用SELECT DISTINCT .. ORDER BY:
@notifications = Notification.select("DISTINCT(notifier_id, created_at)").order('created_at DESC')
生成以下SQL语句:SELECT DISTINCT(notifier_id, created_at) FROM "notifications" ORDER BY "notifications"."created_at" DESC, created_at DESC
但我遇到了错误:SELECT DISTINCT,ORDER BY表达式必须出现在选择列表中
created_at
已经出现在选择列表中,那么问题出在哪里呢?
根据这篇帖子:PG::Error: SELECT DISTINCT, ORDER BY expressions must appear in select list
我尝试使用SELECT ... GROUP BY .. ORDER BY:
@notifications = Notification.select("notifier_id").group("notifier_id").order("MAX(created_at)")
生成这个SQL语句:
SELECT "notifications"."notifier_id" FROM "notifications" GROUP BY notifier_id ORDER BY "notifications"."created_at" DESC, MAX(created_at)
但是现在我遇到一个错误:column "notifications.created_at" must appear in the GROUP BY clause or be used in an aggregate function
我正在使用聚合函数,那么这个错误是关于什么的呢?
更新:
使用这段代码:
@notifications = Notification.select("DISTINCT ON (created_at) created_at, notifier_id").order('created_at DESC')
我返回了所有消息的列表,而不仅限于每个发件人最新的消息。
GROUP BY
查询有点混乱。你能否提供一些示例数据以及你想要的结果?这更像是一个 Postgres 的问题,而不是 Ruby 的问题。 - Tim BiegeleisenSUM
,COUNT
)的列。 - Tim Biegeleisen