查询以获取特定用户的行,其中收入 > 该用户最早日期的收入
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
)
我有一个名为 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
)