0

我有一个名为 user_revenue 的表,看起来像这样在此处输入图像描述

所以我需要的查询,如果为用户'AAA'运行应该只返回最后一行。

SELECT *
FROM user_revenue 
WHERE user_Id = 'AAA'  /*Change according to user_id*/
AND revenues > (SELECT revenues FROM (
SELECT revenues, MIN(date) FROM user_revenue
WHERE user_id='AAA' ))/*Change according to user_id*/

我设法写了这个来完成工作,但理想情况下,我只想在查询中输入一次 user_id(而这里需要输入两次),有没有办法做到这一点?

4

2 回答 2

1

user_revenue您可以像u在查询主体中一样为表起别名,并u.user_Id在需要时在子查询中使用:

SELECT u.*
FROM user_revenue u
WHERE u.user_Id = 'AAA'
AND u.revenues > (
  SELECT revenues FROM user_revenue
  WHERE user_Id = u.user_Id 
  AND date = (SELECT MIN(date) FROM user_revenue WHERE user_Id = u.user_Id)
)

或者:

SELECT u.*
FROM user_revenue u
WHERE u.user_Id = 'AAA'
AND u.revenues > (
  SELECT revenues 
  FROM user_revenue
  WHERE user_Id = u.user_Id
  ORDER BY date
  LIMIT 1
)
于 2020-02-04T19:44:19.393 回答
0

如果您想要用户的最新行,则不需要任何子查询:

SELECT ur.*
FROM user_revenue ur
WHERE ur.user_Id = 'AAA'
ORDER BY date DESC
LIMIT 1;
于 2020-02-04T19:35:12.190 回答