Как получить наибольшее значение для каждой группы, проверив значение двух столбцов - PullRequest
1 голос
/ 15 мая 2019

У меня есть эта таблица test_table ниже

USER_ID | YEAR | MONEY
----------------------
  1     |  0   |  0
  1     | 12   | 12
  1     | 48   | 12
  2     | 15   | 15
  2     | 10   | 20
  3     |  0   |  0

Так что я пытаюсь вернуть строку с наибольшим количеством денег.Например, возвращаемая строка будет выглядеть следующим образом:

USER_ID | YEAR | MONEY
----------------------
  1     | 12   | 12
  1     | 48   | 12
  2     | 10   | 20
  3     |  0   |  0

Но поскольку идентификатор пользователя 1 имеет одинаковое соотношение цены и качества, я хотел бы проверить наивысший год этой суммы денег и вернуть результат.Ожидаемый результат должен быть

USER_ID | YEAR | MONEY
----------------------
  1     | 48   | 12
  2     | 10   | 20
  3     |  0   |  0

Можно ли получить строку, подобную этой?

Вот ссылка для проверки вашего запроса онлайн http://sqlfiddle.com/#!9/2e5660/1

Ответы [ 2 ]

1 голос
/ 15 мая 2019

Вы можете попробовать использовать коррелированный подзапрос

DEMO

select userid, moneyval,max(year) as year
from
(
select * from t a
where moneyval in 
(select max(moneyval) from t b where a.userid=b.userid)
)A group by userid, moneyval

ВЫХОД:

userid  moneyval    year
1        12          48
2        20          10
3        0           0
0 голосов
/ 15 мая 2019

Вы можете использовать not существует, чтобы получить строки с максимальными значениями в деньгах (и году):

  select t.*
  from test_table t 
  where not exists (
    select 1 from test_table
    where userid = t.userid and (
      money > t.money or (money = t.money and year > t.year)
    )  
  ) 

См. demo .Результаты:

| userid | money | year |
| ------ | ----- | ---- |
| 1      | 12    | 48   |
| 2      | 20    | 10   |
| 3      | 0     | 0    |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...