2013-05-24 3 views
1

Привет это таблица Im с помощью скажем Loandetailsвыбрать один из двух столбцов на основе максимального значения другого столбца в SQL

Loanno Balance amount DueDATE 
1001045 308731.770000 12/31/99 
1001045 2007700.740000 12/31/99 
1001045 3087318905.770000 11/01/99 
1001045 308731.770000 12/31/99 

я должен выбрать Loanno и DueDate на основе maximum value of Balance Amount. Loanno не является уникальным. Пожалуйста, помогите мне на этом.

+1

которые вы используете? – Rohan

+0

@ R.S-MS Access – user2416710

ответ

0

Попробуйте это:

SELECT L.Loanno, L.Balanceamount, L.DueDate 
    FROM dbo.Loan L 
    INNER JOIN 
     (
      SELECT Loanno, MAX(Balancemount) as MaxBalance FROM dbo.Loan 
      GROUP BY LoanNo 
     ) SUB ON L.Loanno = SUB.Loanno AND L.Balanceamount = SUB.MaxBalance 

Суб запрос возвращает Maximum balance для каждого LoanNo (независимо от даты) Когда присоединился к исходной таблице вы остались с LoanNo, максимальный баланс и дата, с которой это Должен.

Ok только протестировали запрос ниже в MS Гости могут воспользоваться и она работает просто отлично, заменить Table1 с действительным именем таблицы:

SELECT T.LoanNo, T.DueDate, T.BalanceAmount 
FROM Table1 As T 
    INNER JOIN (
    SELECT T.Loanno, Max([T.Balanceamount]) AS MaxBalance 
    FROM Table1 as T 
    GROUP BY T.Loanno) SUB ON T.LoanNo = SUB.LoanNo AND T.BalanceAmount = SUB.MaxBalance 
+0

Спасибо, что это работает !! – user2416710

1

В SQLServer2005 + вы можете использовать ROW_NUMBER функция ранжирования

;WITH cte AS 
(
    SELECT *, ROW_NUMBER() OVER(PARTITION BY Loanno ORDER BY [Balance Amount] DESC) AS rn 
    FROM dbo.your_tableName 
) 
    SELECT Loanno, DueDate 
    FROM cte 
    WHERE rn = 1 
+0

Im usig MS Access.Will эта работа? – user2416710

+0

@ user2416710 попробуйте мой запрос, он будет работать при доступе – CSL

-1

Try это вне -:

SELECT Loanno ,DueDate 
FROM 
    (SELECT Loanno ,DueDate , MAX(Balance amount) BAL_AMT 
     FROM Loandetails 
     GROUP BY Loanno ,DueDate 
    ) 
+0

Группировка по Loanno и DueDate не помогает найти дату, в которой должен быть максимальный баланс, он просто находит максимальный баланс для уникальной даты. – CSL

+0

Да, вы правы CSL. Я неправильно понял вопрос. Loanno - максимальная сумма баланса. – Rebika

1

Это будет работать, в подзапросе, оттягивая максимальное значение поля «Баланс», которое затем используется для поиска одной (или более) записей с тем же значением.

select LoanNo, DueDate 
from _LoanData 
where Balance = (
    select max(Balance) 
    from _loandata 
    ) 

или это, что тянет верхнюю 1 (первую запись) из списка, который заказанный баланс в порядке убывания. Производительность мудрая, это медленнее.

select top 1 LoanNo, DueDate, Balance 
from _LoanData 
order by Balance desc 

Удачи.

+0

Это работает только в том случае, если у меня есть 1 номер кредита ... Что делать, если у меня есть несколько номеров займов? – user2416710

+0

Брайан, хотя образец набора данных не иллюстрирует это, я бы подразумевал, что в одной таблице могут быть разные записи loanno, ваши запросы не работают, когда это так, поскольку они обслуживают только кредит с самым высоким балансом, а не по кредиту. – CSL

+0

Выбрать топ 1 LoanNo, DueDate, остаток от _LoanData заказать по балансу desc, duedate desc ... это вернет максимальный баланс с максимальным (max) DueDate – Brian

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