查询以获取特定用户的行,其中收入 > 该用户最早日期的收入

Query to get rows for specific user where revenue > revenue of earliest date for that user

我有一个名为 user_revenue 的 table,看起来像这样

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

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(而这里需要输入两次),是有办法吗?

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

SELECT ur.*
FROM user_revenue ur
WHERE ur.user_Id = 'AAA'
ORDER BY date DESC
LIMIT 1;

您可以在查询的主体中为 table 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
)