У меня есть таблица с идентификаторами столбцов, ad_id, amount_time, которая показывает ID пользователей, рекламу, которую они видели, и сколько раз они их видели.Вот пример данных:
table name: ads
ID | ad_id | amount_time
1 2 600
1 3 300
3 1 400
1 3 100
1 1 700
Мы хотим, чтобы результат показал разницу между max и 2nd max of amount_time, сгруппированными по ID и ad_id
Таким образом, результат равен
ID |ad_id | diff_amount_time
1 3 200
Я могу получить max и second_max для всей таблицы, выполнив:
select
(SELECT MAX(amount_time) FROM ads) maxtime,
(SELECT MAX(amount_time) FROM ads
WHERE amount_time NOT IN (SELECT MAX(amount_time) FROM ads )) as
second_max_time
Однако у меня возникают проблемы с включением предложения group by для получения моего результата.Я знаю, что есть способ включить order by
и limit 2
, чтобы получить максимум и второй максимум, но это вычислительно дорого, и я хочу знать, есть ли другое решение, не заказывая столбец amount_time.