如何检索每个用户的最新订阅?
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)
结果,我想为每个用户获取 subscription 其 provider 是(在这种情况下)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
添加到该子查询。
例如我们有 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)
结果,我想为每个用户获取 subscription 其 provider 是(在这种情况下)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
添加到该子查询。