这是 SQL 命令结果的屏幕截图:
这是SQL命令:
SELECT inl_cbsubs_subscriptions.user_id AS cbsubsUserID, inl_cbsubs_subscriptions.id AS cbsubsId, inl_cbsubs_subscriptions.status AS status, inl_cbsubs_payment_items.subscription_id AS paymentSubID, inl_cbsubs_payment_items.stop_date AS paymentStopDate, inl_cbsubs_payment_items.id AS paymentID
FROM inl_cbsubs_subscriptions
INNER JOIN inl_cbsubs_payment_items
ON inl_cbsubs_subscriptions.id=inl_cbsubs_payment_items.subscription_id
WHERE status='C'
ORDER BY paymentID DESC;
我希望调整此命令,以便我只显示每个用户的最新结果。所以换句话说,在这种情况下,表格应该类似于:
如您所见,cbsubsUserID
每个 ID 仅显示一个结果,而之前 596
id 有多个结果。
最佳答案
如果你想要最新的结果,最好的方法是使用not exists
:
SELECT s.user_id AS cbsubsUserID, s.id AS cbsubsId, s.status AS status,
i.subscription_id AS paymentSubID, i.stop_date AS paymentStopDate, i.id AS paymentID
FROM inl_cbsubs_subscriptions s INNER JOIN
inl_cbsubs_payment_items i
ON s.id = i.subscription_id
WHERE s.status = 'C' and
not exists (select 1
from inl_cbsubs_payment_items i2
where i2.subscription_id = i.subscription_id and
i2.id > i.id
)
ORDER BY paymentID DESC;
您需要在 inl_cbsubs_payment_items(subscription_id, paymentid)
上建立索引。
这句话的意思是:“为我提供给定订阅 ID 的所有项目,这些项目没有更大的订阅付款停止日期”。这是一种奇特的说法,“给我每个订阅 ID 的最新信息”,但它往往在数据库中最有效。
关于mysql - 如何过滤 MySQL 结果以在每个用户的基础上显示 LIMIT 1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22593248/