SQL запрос, чтобы выбрать почти одинаковые строки на основе значения столбца
Существуют сценарии, в которых есть 2 записи для одного и того же номера (91132310000) и другой биллинговой системы (A и B) и с одинаковой датой начала (07-JUL-03), но с другой датой окончания, поэтому мне нужно выбрать строку максимальной даты начала,
Ниже таблицы выводится удаление дублирующихся строк
BILLING ACCOUNT NUM START_DATE END_DATE STATUS
A AA54340152 91132310000 07-JUL-03 W
B AA54340152 91132310000 07-JUL-03 31-DEC-99 W
B AA54340152 91132310001 07-JUL-03 31-DEC-99 W
B AA54340152 91132310002 07-JUL-03 31-DEC-99 W
Поэтому я использую этот запрос ниже... но он дает мне одну запись, в которой есть биллинговая система A и B для NUM '91132310000', поэтому я хочу ввести только биллинговую систему A. Аналогичным образом, существует еще одно условие: если система выставления счетов для одного и того же NUM - это B и C, то выберите строку B для системы выставления счетов. Это два условия, которые я не могу записать в SQL.
SELECT * FROM number_data A WHERE START_DATE = (SELECT MAX(START_DATE ) FROM number_data B WHERE A.NUM=B.NUM'
Фрагмент из вывода:
BILLING ACCOUNT NUM START_DATE END_DATE STATUS
A AA54340152 91132310000 07-JUL-03 W
B AA54340152 91132310000 07-JUL-03 31-DEC-99 W
2 ответа
Вы должны использовать оператор Group By.
Select Num, Max(Start_Date)
From number_data
Group By Num
Этот запрос вернет список всех различных 'Num' в number_data и выберет максимальную дату начала
SELECT * FROM
(
SELECT *,
RANK() OVER (PARTITION BY NUM ORDER BY BILLING) AS Rk
FROM @Billing
) d
WHERE d.Rk = 1
Если это для sql-сервера, то вы можете использовать этот запрос, чтобы получить наименьшую платежную запись для каждого номера.