У меня есть таблица, в которой хранятся данные, где случайные данные были сохранены несколько раз из-за чувствительности к регистру имени пользователя на стороне сервера. Поле имени пользователя должно рассматриваться как нечувствительное к регистру. Важные столбцы и данные для таблицы можно найти ниже.Выбор строк на основе двух столбцов в SQL Server
Мои требования теперь состоят в том, чтобы удалить все, кроме последних сохраненных данных. Я пишу скрипт sql для этого и начинаю, идентифицируя все строки, которые являются дубликатами. Этот выбор возвращает таблицу, как показано ниже.
Для каждой строки последнее сохранение - LASTUPDATEDDATE, если оно существует, иначе CREATEDDATE. Для этого примера, самый последний за исключением «имя пользователя» будет Row 3.
ID CREATEDDATE LASTUPDATEDDATE USERNAME -- ----------- --------------- -------- 1 11-NOV-11 USERNAME 2 01-NOV-11 02-NOV-11 username 3 8-JAN-12 USERname
Мой сценарий (который выбирает все строки, где появляется дублируется имя пользователя) выглядит следующим образом:
SELECT
id, createddate, lastupdateddate, username
FROM
table
WHERE
LOWER(username)
IN
(
SELECT
LOWER(username)
FROM
table
GROUP BY
LOWER(username)
HAVING
COUNT(*) > 1
)
ORDER BY
LOWER(username)
Мой вопрос сейчас is: Как выбрать все, кроме строки 3? Я искал Stack Overflow для хорошего совпадения с этим вопросом, но не нашел подходящего соответствия. Я знаю, что я, вероятно, должен сделать что-то вроде такого, но не могу его обмануть. Было бы очень благодарно за толкание в правильном направлении.
Мы используем SQL Server, возможно, совершенно новую версию.