2015-02-25 2 views
1

У меня есть запросполучить только одну строку для каждого ID с наивысшим значением

SELECT 
    * 
FROM 
    mgr.MF_AGREEMENT_LGR TABLE1 
INNER JOIN 
    (SELECT 
     MAX(VALUE_DATE) AS VALUE_DATE, 
     REGISTRATION_NO AS REGISTRATION_NO 
    FROM 
     mgr.MF_AGREEMENT_LGR 
    GROUP BY 
     REGISTRATION_NO) AS TABLE2 ON TABLE1.REGISTRATION_NO = TABLE2.REGISTRATION_NO 
WHERE 
    TABLE1.VALUE_DATE = TABLE2.VALUE_DATE 
    AND TABLE1.TRX_CODE = 'LCLR' 
ORDER BY 
    TABLE1.REGISTRATION_NO 

Это возвращает строки с последней датой для каждого REGISTRATION_CODE. Некоторые из них имеют три или более результата для каждого REGISTRATION_CODE, потому что на одной и той же дате оно имеет более одной транзакции.

Кроме того, каждая строка имеет поле DOC_NO.

Мой вопрос: как я могу получить только одну строку от каждого REGISTRATION_CODE с максимальным DOC_NO.

К сожалению, DOC_NO является varchar.

Пример значения для этого поля является: Amort 1, Amort 12, Amort 5

Если эти примеры в одном REGISTRATION_CODE, нужно только строку с наивысшим Аморт, который является Amort 12.

Я использую SQL Server 2000.

+0

Есть ли способ изменить ваши таблицы? Получение наивысшего числа из столбца типа данных varchar будет сложным. Если бы вы знали максимальную длину чисел для 'DOC_NO', вы могли бы технически« SELECT RIGHT (DOC_NO, 2) », например, затем передать это как int и упорядочить по' DESC'. – Phoenix

ответ

2

SQL Server 2000 не поддерживается в годах. Вам действительно нужно перейти на поддерживаемое программное обеспечение.

Вы можете получить то, что вы хотите с not exists:

SELECT al.* 
FROM mgr.MF_AGREEMENT_LGR al 
WHERE NOT EXISTS (SELECT 1 
        FROM mgr.MF_AGREEMENT_LGR al2 
        WHERE al2.registration_no = al.registration_no and 
         (al2.date > al2.date or 
         al2.date = al.date and al2.DOC_NO > al.DOC_NO 
         ) 
       ) AND 
     al.TRX_CODE = 'LCLR'; 

Вы, вероятно, хотите условие на 'LCLR' в подзапроса, а также. Однако это не в вашем исходном запросе, поэтому я оставляю его.

 Смежные вопросы

  • Нет связанных вопросов^_^