Запрос для получения строк для указанного c пользователя, где доход> доход с самой ранней даты для этого пользователя - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть таблица с именем user_revenue, которая выглядит следующим образом enter image description here

Так что запрос, который мне нужен, если выполняется для пользователя '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 (тогда как здесь его нужно вводить дважды). способ сделать это?

Ответы [ 2 ]

1 голос
/ 04 февраля 2020

Вы можете создать псевдоним таблицы 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
)
0 голосов
/ 04 февраля 2020

Если вы хотите самую последнюю строку для пользователя, вам не нужны никакие подзапросы:

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