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-сервера, то вы можете использовать этот запрос, чтобы получить наименьшую платежную запись для каждого номера.

Другие вопросы по тегам