Текущее время: Пт, мар 29 2024, 02:17

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Помогите сделать select из таблицы с миллионами строк
СообщениеДобавлено: Пн, окт 07 2019, 14:03 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Чт, авг 10 2006, 08:44
Сообщения: 320
Откуда: Odessa
Добрый день!

Есть Z-таблица c миллионами записей, мне нужно сделать (желательно!!!) одну выборку.

Суть выборки такова: за период выбрать из таблицы сумму по полю количества, а также выбрать максимальное количество и его дату.
В таблице количества хранятся в разрезе дней.
Пример таблицы:
Code:
ID  DATE              VOLUME     
1    07.10.2019      123,78
2    08.10.2019      33,12
3    09.10.2019      13,54
4    10.10.2019      3,35
 

Мне нужно получить строку: МаксКол: 123,78, его дата: 07.10.2019, всего: 173,79.
Code:
  select
      id
      max( VOLUM )
      sum( VOLUME )
    from ztab
   group by id.
 

Код, приведенный выше, дает желаемый результат, но без даты, к которой относится максимальное количество. Вставка даты в select и в group by нарушает логику и не собирает общую сумму (данные в разрезе дней, а не айдишника).

Буду очень рад любым подсказкам!

_________________
Заранее благодарен за помощь. С уважением, Primat.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите сделать select из таблицы с миллионами строк
СообщениеДобавлено: Пн, окт 07 2019, 15:23 
Ассистент
Ассистент

Зарегистрирован:
Пт, фев 01 2013, 10:27
Сообщения: 35
Добрый день.
Как вариант - заджойнить таблицу саму на себя, условие джойна volume = max( volume ). Только надо придумать что делать если будет несколько одинаковых максимальных значений..

PS. проверил , возникают проблемы с условием по максимальному значению в JOIN.
Тогда использовать промежуточный CDS view в котором считать сумму и максимум и затем этот view джойнить с исходной таблицей по volume = max_volume.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Помогите сделать select из таблицы с миллионами строк
СообщениеДобавлено: Пн, окт 07 2019, 16:19 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Чт, авг 10 2006, 08:44
Сообщения: 320
Откуда: Odessa
Извиняюсь за древность, но у нас версия 702. У нас нет CDS view :oops:

_________________
Заранее благодарен за помощь. С уважением, Primat.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите сделать select из таблицы с миллионами строк
СообщениеДобавлено: Пн, окт 07 2019, 17:23 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, май 12 2011, 16:06
Сообщения: 347
А такое работает?
Code:
SELECT z~id z~date z~volume SUM( z2~volume ) AS sum
  FROM ztab AS z INNER JOIN ztab AS z2
                   ON z2~id = z~id
  INTO TABLE t
  WHERE volume = ( SELECT MAX( volume ) FROM ztab AS z3
                     WHERE z3~id = z~id  )
  GROUP BY z~id z~date z~volume
  ORDER BY z~volume.
UPD. Если в таблице для одного и того же id максимальная сумма будет повторяться для разных дат, то и при выборке строк с этой суммой будет несколько.


Последний раз редактировалось LAT Ср, окт 09 2019, 17:59, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите сделать select из таблицы с миллионами строк
СообщениеДобавлено: Вт, окт 08 2019, 07:18 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, мар 29 2007, 11:51
Сообщения: 330
Откуда: Yugorsk.RU
Пол: Мужской
Цитата:
нужно сделать (желательно!!!) одну выборку

А правильно ли идеологически так поступать вообще, на реальной, возможно высоконагруженной СУБД (а если ещё и блокировочник типа ДБ/2)?
М.б. однопроходный скан всей таблицы с подсуммированием средствами абапа будет менее безжалостный к другим толпящимся в системе пользователям? :roll:


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите сделать select из таблицы с миллионами строк
СообщениеДобавлено: Вт, окт 08 2019, 17:10 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Вт, май 17 2005, 13:35
Сообщения: 4842
Откуда: Москва
Пол: Мужской
По поводу даты для максимального volum, как-то так (упрощая вариант LAT):
Code:
SELECT z~id z~date z~volume
         FROM ztab
  INTO TABLE t
  WHERE volume = ( SELECT MAX( volume ) FROM ztab  ).

Если сделать индекс по volum, работать будет моментально.
В Oracle можно без подзапроса написать с помощью keep dance rank, но это будет для SAP Native SQL, его использовать не рекомендуется

А вот общую сумму по volum придется отдельным селектом вытаскивать и в нем БД придется все строки таблицы на своей стороне перебрать.
Code:
select sum(volume) into l_volum_sum
from ztab

_________________
Удача - результат нашего желания (© А. Нортон)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите сделать select из таблицы с миллионами строк
СообщениеДобавлено: Вт, окт 08 2019, 17:14 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Вт, май 17 2005, 13:35
Сообщения: 4842
Откуда: Москва
Пол: Мужской
pberezin написал:
Цитата:
нужно сделать (желательно!!!) одну выборку

А правильно ли идеологически так поступать вообще, на реальной, возможно высоконагруженной СУБД (а если ещё и блокировочник типа ДБ/2)?
М.б. однопроходный скан всей таблицы с подсуммированием средствами абапа будет менее безжалостный к другим толпящимся в системе пользователям? :roll:


Не скажу за DB/2, но с нормальной БД (Oracle) как раз-таки безжалостно таскать по сети с БД на сервер приложений миллионы строк ради того чтобы на выходе получить одно число.

_________________
Удача - результат нашего желания (© А. Нортон)


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB