如何检索每个用户的最新订阅?

How can I retrieve the latest subscription for each user?

例如我们有 2 个表:

TABLE users WITH FIELDS
    id

TABLE providers WITH FIELDS
    id

TABLE subscriptions WITH FIELDS
    id
    start_date
    provider_id - OneToMany
    user_id - OneToMany

以及以下 sql 语句:

SELECT subscription.id
FROM subscriptions
INNER JOIN providers ON 
    subscriptions.provider_id = providers.id AND
    providers.id = 2
INNER JOIN (
    SELECT user_id, MAX(start_date) AS start_date
    FROM subscriptions GROUP BY user_id
) AS max USING (user_id, start_date)

结果,我想为每个用户获取 subscriptionprovider 是(在这种情况下)2 具有最新的start_date。 在这种情况下,我们使用 provider_id 2 但该值是动态的。

我希望第二个 INNER JOIN 中的 MAX 只接受零售商为 2 的订阅,但它没有,它接受了所有订阅。这是为什么?

提前致谢。

问:我希望第二个 INNER JOIN 中的 MAX 只接受零售商为 2 的订阅,但它没有,它接受了所有订阅。这是为什么?

这个带 MAX 的子查询是独立的。如果将其作为独立查询执行:

SELECT user_id, MAX(start_date) AS start_date
    FROM subscriptions GROUP BY user_id

那么您会期望它 return 每个 user_id 及其 max(start_date),独立于 provider_id 字段,因为它从未在该查询中提及。

当它 运行 作为较大查询中的子查询时,它 return 的结果完全相同。

您可以将条件 WHERE provider_id=2 添加到该子查询。