【发布时间】:2021-11-24 12:06:18
【问题描述】:
型号Subscriptionhas_manySubscriptionCart。
SubscriptionCart 有一个 status 和一个 authorized_at 日期。
我需要从与Subscription 关联的所有购物车中选择日期最旧的authorized_at 购物车,然后我必须通过此subscription_carts.authorized_at 列订购所有返回的Subscription 结果。
下面的查询正在运行,但我不知道如何选择 DISTINCT ON subscription.id 以避免重复但 ORDER BY subscription_carts.authorized_at 。
到目前为止的原始 sql 查询:
select distinct on (s.id) s.id as subscription_id, subscription_carts.authorized_at, s.*
from subscriptions s
join subscription_carts subscription_carts on subscription_carts.subscription_id = s.id
and subscription_carts.plan_id = s.plan_id
where subscription_carts.status = 'processed'
and s.status IN ('authorized','in_trial', 'paused')
order by s.id, subscription_carts.authorized_at
如果我先尝试ORDER BY subscription_carts.authorized_at,则会收到错误消息,因为DISTINCT ON 和ORDER BY 表达式的顺序必须相同。
我发现的解决方案对于我需要的东西来说似乎太复杂了,而且我未能实施它们,因为我不完全理解它们。
使用GROUP BY subscription_id 然后从该组中选择而不是使用DISTINCT ON 会更好吗?任何帮助表示赞赏。
【问题讨论】:
-
对最终结果使用子查询和排序
-
你能说得更具体点吗?从一组subscription_carts 中选择最小authorized_at 日期的子查询?
标签: sql postgresql distinct-on