Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 выборка маx значения при объединении нескольких таблиц  [new]
tanya.avapu
Member

Откуда:
Сообщений: 19
Добрый день! Помогите)))
Есть три таблицы, они соединены по уникальным полям. Вот такой запрос:

SELECT ACC.Acc_Nmr, FINFLOW.Flow_OprDat, FINFLOW.Flow_OprDatPer, ACC.Acc_KAgIdNm,FINFLOW.Flow_Rcd,ACCPLT.AccPlt_RcdAcc
FROM ACC INNER JOIN
ACCPLT ON ACC.Acc_Rcd = ACCPLT.AccPlt_RcdAcc INNER JOIN
FINFLOW ON ACCPLT.AccPlt_RcdFlw = FINFLOW.Flow_Rcd

Нужно сгруппировать данные по ACC.Acc_Nmr или по ACCPLT.AccPlt_RcdAcc и вывести набор данных для максимального значения FINFLOW.Flow_Rcd. Как правильно дописать запрос? Заранее спасибо!
25 май 15, 18:41    [17687230]     Ответить | Цитировать Сообщить модератору
 Re: выборка маx значения при объединении нескольких таблиц  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4974
Какая версия SQL Server?
25 май 15, 18:44    [17687238]     Ответить | Цитировать Сообщить модератору
 Re: выборка маx значения при объединении нескольких таблиц  [new]
iap
Member

Откуда: Москва
Сообщений: 47194
SELECT TOP(1) WITH TIES *
FROM ...
ORDER BY RANK()OVER(PARTITION BY ACC.Acc_Nmr ORDER BY FINFLOW.Flow_Rcd DESC);
25 май 15, 19:27    [17687454]     Ответить | Цитировать Сообщить модератору
 Re: выборка маx значения при объединении нескольких таблиц  [new]
tanya.avapu
Member

Откуда:
Сообщений: 19
a_voronin,
Sql server 2012
25 май 15, 19:29    [17687466]     Ответить | Цитировать Сообщить модератору
 Re: выборка маx значения при объединении нескольких таблиц  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4974
tanya.avapu
Нужно сгруппировать данные по ACC.Acc_Nmr или по ACCPLT.AccPlt_RcdAcc и вывести набор данных для максимального значения FINFLOW.Flow_Rcd. Как правильно дописать запрос? Заранее спасибо!


Под SQL 2012 надо что-то такое, если хотите конкретнее давайте тестовый набор данных

FIRST_VALUE(одно из полей) OVER (PARTITION BY ACC.Acc_Nmr  ORDER BY FINFLOW.Flow_Rcd DESC)
25 май 15, 20:40    [17687671]     Ответить | Цитировать Сообщить модератору
 Re: выборка маx значения при объединении нескольких таблиц  [new]
tanya.avapu
Member

Откуда:
Сообщений: 19
a_voronin, спасибо за ответ.
Набор данных
Acc_Nmr Flow_OprDat Flow_Rcd AccPlt_RcdAcc
ИС/109360 2015-05-22 00:00:00.000 1241 429
ИС/126863 2015-05-07 00:00:00.000 12 517
ИС/127535 2015-05-22 00:00:00.000 11 456
ИС/118357 2015-05-22 00:00:00.000 1189 2841
ИС/118357 2015-05-22 00:00:00.000 1200 2841

Такие данные выводит при запросе, который я писала выше.
Мне нужно чтобы выводило поле Flow_OprDat по сгруппированному полю AccPlt_RcdAcc (ACC_NMR) c max(Flow_Rcd)
Результат должен быть таким:

ИС/109360 2015-05-22 00:00:00.000 1241 429
ИС/126863 2015-05-07 00:00:00.000 12 517
ИС/127535 2015-05-22 00:00:00.000 11 456
ИС/118357 2015-05-22 00:00:00.000 1200 2841
25 май 15, 21:17    [17687851]     Ответить | Цитировать Сообщить модератору
 Re: выборка маx значения при объединении нескольких таблиц  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4974
Вот это должно сработать

iap
SELECT TOP(1) WITH TIES *
FROM ...
ORDER BY RANK()OVER(PARTITION BY ACC.Acc_Nmr ORDER BY FINFLOW.Flow_Rcd DESC);
25 май 15, 21:22    [17687866]     Ответить | Цитировать Сообщить модератору
 Re: выборка маx значения при объединении нескольких таблиц  [new]
tanya.avapu
Member

Откуда:
Сообщений: 19
iap,спасибо получилось.
25 май 15, 21:40    [17687962]     Ответить | Цитировать Сообщить модератору
 Re: выборка маx значения при объединении нескольких таблиц  [new]
tanya.avapu
Member

Откуда:
Сообщений: 19
a_voronin,можно еще глупый вопрос... А лексику запроса можете разжевать, как новичку...Еще раз спасибо за помощь!
25 май 15, 21:43    [17687972]     Ответить | Цитировать Сообщить модератору
 Re: выборка маx значения при объединении нескольких таблиц  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4974
tanya.avapu
a_voronin,можно еще глупый вопрос... А лексику запроса можете разжевать, как новичку...Еще раз спасибо за помощь!


iap пропустил оконную функцию RANK через все ваши группы в результате нужные вам записи получили RANK = 1, затем он выбрал TOP 1 WITH TIES , что означает выбрать первый и всех, кто ему равен, то есть 1 и всех остальных с 1, пока не начнётся 2.
26 май 15, 12:40    [17690236]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить