У меня есть SQL-запрос, который возвращает количество записей, сгруппированных как показано ниже:
ID USERNAME PASSWORD IDGROUP LAST_LOGIN
1 1 XXX 999989 27/03/2019 3:55:28 PM
2 2 XXX 999989 27/03/2019 3:55:28 PM
3 3 XXX 999989 27/03/2019 3:55:28 PM
4 4 XXX 999977 27/03/2019 3:55:28 PM
5 5 XXX 999977 27/03/2019 3:55:28 PM
6 6 XXX 999976 27/03/2019 3:55:28 PM
7 7 XXX 999976 27/03/2019 3:55:28 PM
8 8 XXX 682849 17/05/2019 12:23:32 PM
9 9 XXX 682849 17/05/2019 12:23:32 PM
10 10 XXX 682849 28/05/2019 6:56:52 PM
РЕДАКТИРОВАТЬ: запрос, приведенный выше запись:
SELECT *
FROM schemaN.tableX
WHERE IDGROUP NOT IN (SELECT DISTINCT IDGROUP
FROM (SELECT IDGROUP,COUNT (IDGROUP)OVER (PARTITION BY IDGROUP) cnt
FROM schemaN.tableX
) WHERE CNT=1)
ORDER BY IDGROUP DESC;
Недавно был добавлен столбец last_login, и произошла ошибка, при которой во время создания столбца была добавлена дата / время 27.03.2009 15:55:28 для всех записей, как показано выше.
В любой IDGROUP только один пользователь должен иметь доступ к логину. то есть для идентификатора 999989 у нас не может быть всех имен пользователей 1,2,3. У нас должен быть только один.
У меня нет способа узнать, какое имя пользователя является правильным, поэтому я хочу проверить имя пользователя, которое вошло в систему последним, и удалить всех остальных пользователей для этого IDGROUP. т.е. для IDGROUP 682849, имя пользователя 10 останется, а пользователи 8 и 9 будут удалены.
Но для IDGROUP, например 999989, 999977 или 999976, которые имеют похожий LAST_LOGIN, я хочу проверить IDGROUP только с двумя именами пользователей и удалить только одну случайную запись, для любого другого IDGROUP, где пользователей больше 2, а LAST_LOGIN такой же, удалить все записи для этого IDGROUP из этой таблицы, например, удалить все записи с IDGROUP 999989, но удалить только одну случайную запись для IDGROUP 999977,999976.
Приведенная выше таблица является результатом запроса и содержит огромные записи, более 10 тыс. Записей.
БД оракул 12с.