Выберите все строки, кроме первой, для каждого отдельного значения конкретного столбца - PullRequest
1 голос
/ 07 июня 2019

Я застрял с каким-то запросом SQL. Допустим, у меня есть таблица БД, например:

user_hash | created_on
xxx         1
xxx         10
xxx         100
yyy         2
yyy         20
yyy         200

Мне нужно выбрать все строки, кроме одной с наименьшим значением created_on для каждого user_hash, поэтому я хочу, чтобы мои результаты были такими:

user_hash | created_on
xxx         10
xxx         100
yyy         20
yyy         200

Я знаю, как выбрать его для конкретного user_hash, используя смещение:

SELECT *
FROM users
WHERE user_hash = ‘xxx’
ORDER BY created_on ASC
OFFSET 1 ROW;

но я не могу понять, как это сделать для всех user_hash в одном запросе. Я пытался с группировкой, подзапросами и объединениями, но безрезультатно. Может ли кто-нибудь помочь мне с этим?

Ответы [ 2 ]

4 голосов
/ 07 июня 2019

Мы можем попробовать использовать ROW_NUMBER здесь, при условии, что оно доступно в вашей базе данных:

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY user_hash ORDER BY created_on) rn
    FROM yourTable
)

SELECT user_hash, created_on
FROM cte
WHERE rn > 1;
0 голосов
/ 07 июня 2019

Один метод использует коррелированный подзапрос:

select t.*
from t
where t.created_on > (select min(t2.created_on)
                      from t t2
                      where t2.user_hash = t.user_hash
                     );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...