powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите с выборкой
5 сообщений из 5, страница 1 из 1
Помогите с выборкой
    #40124554
Sashaua
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброго дня, и с наступившим.
что то застрял, подскажите как елегантнее сделать такой подсчет. Есть две таблицы.

order_model

idid_orderid_modelcount_modelprice_model110015150


order_history

idid_orderid_status_orderdate_1100102.01.20222100203.01.20223100303.01.20224100403.01.2022

необходимо следать
Код: sql
1.
select sum (count_model*price_model).....



но только для заказов которые в нужную дату были в определенных статусах в таблице order_history . Например которые имели 3.01.2022 id_status_order 2 или 3. Вот здесь у меня заминка, если заказ был в одну и туже дату в двух статусах которые удовлетворяют условиям выборки, сумма считаеться ошибочно. Удваивается или утраивается в зависимости сколько записей попадает с таблицы order_history .
Подскажите как сделать такой подсчет?
заранее спасибо.
...
Рейтинг: 0 / 0
Помогите с выборкой
    #40124557
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предварительно выборку группировать по дате внутри Derived Table.
Или использовать EXISTS вместо JOIN.
...
Рейтинг: 0 / 0
Помогите с выборкой
    #40124573
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не видно тех попыток которые были сделаны. Или их не было?
...
Рейтинг: 0 / 0
Помогите с выборкой
    #40124576
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Раз ключевым условием является присутствие заказа в истории, по определенным условиям, то нужно начать оттуда.

Код: plsql
1.
2.
3.
4.
5.
select
  oh.id_order
from order_history oh
where (oh.data_ = '03.01.2022')
  and (oh.id_status_order in (2, 3))


но как ты сам заметил, тут может оказаться что один и тот же заказ был в одну и ту же дату в нескольких статусах, и id_order в результатах выборки будет повторяться.
Избавиться от дублей можно, сделав например distinct или group by .

Код: plsql
1.
2.
3.
4.
5.
select distinct
  oh.id_order
from order_history oh
where (oh.data_ = '03.01.2022')
  and (oh.id_status_order in (2, 3))



Код: plsql
1.
2.
3.
4.
5.
6.
select
  oh.id_order
from order_history oh
where (oh.data_ = '03.01.2022')
  and (oh.id_status_order in (2, 3))
group by oh.id_order



Ну а потом уже к этому присоединяешь сами заказы.
Например через CTE (WITH .. AS).
...
Рейтинг: 0 / 0
Помогите с выборкой
    #40124577
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Или использовать EXISTS вместо JOIN.

EXISTS тут может быть очень неоптимально.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите с выборкой
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]