模型Subscription
has_many
SubscriptionCart
。
ASubscriptionCart
有一个status
和一个authorized_at
日期。
我需要authorized_at
从与 a 关联的所有购物车中选择日期最早的购物车Subscription
,然后我必须按此列对所有返回的Subscription
结果进行排序。subscription_carts.authorized_at
下面的查询正在运行,但我不知道如何选择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
andORDER BY
表达式的顺序必须相同。
我发现的解决方案对于我需要的东西来说似乎太复杂了,而且我没有实施它们,因为我不完全理解它们。
GROUP BY subscription_id
然后从该组中选择而不是使用会更好DISTINCT ON
吗?任何帮助表示赞赏。