Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Не могу сообразить, как присоединить еще один столбец  [new]
gmikhailov
Member

Откуда:
Сообщений: 5
Коллеги, добрый день.
Есть выборка по заказам за месяц

SELECT P_CODE, P_UID, TO_DATE(TO_CHAR(P_TIMESLOTDELIVERYSTARTDATE,'DD.MM.YY')), P_TOTALPRICE, P_TIMESLOTCOSTZONE, P_STREETNAME
FROM HYBRIS.ORDERS
JOIN HYBRIS.USERS ON HYBRIS.ORDERS.P_USER = HYBRIS.USERS.PK
JOIN HYBRIS.ADDRESSES ON HYBRIS.ADDRESSES.PK = HYBRIS.ORDERS.P_DELIVERYADDRESS
WHERE HYBRIS.ORDERS.CREATEDTS BETWEEN '01.06.18 00:00:00,0' AND '25.06.18 23:59:59,0'
ORDER BY P_UID;


P_CODE - номер заказа
P_UID - клиент

Появилась необходимость присоединить еще и дату первого заказа по каждому клиенту.
Пока на коленке сделал еще одну выборку:
SELECT P_UID, MIN(ORDERS.CREATEDTS)
FROM HYBRIS.ORDERS
JOIN HYBRIS.USERS ON HYBRIS.ORDERS.P_USER = HYBRIS.USERS.PK
WHERE P_UID IN (SELECT P_UID
FROM HYBRIS.ORDERS
JOIN HYBRIS.USERS ON HYBRIS.ORDERS.P_USER = HYBRIS.USERS.PK
WHERE HYBRIS.ORDERS.CREATEDTS BETWEEN '01.06.18 00:00:00,0' AND '25.06.18 23:59:59,0')
GROUP BY P_UID
ORDER BY P_UID;


Но, к сожалению агрегатная функция подразумевает группировку, а клиент мог сделать не один заказ.
Приходится вручную потом данные собирать.
Помогите пожалуйста сделать все в рамках одной выборки, к сожалению, у меня пока опыта маловато для написания таких выборок.
Заранее спасибо!
25 июн 18, 12:30    [21518272]     Ответить | Цитировать Сообщить модератору
 Re: Не могу сообразить, как присоединить еще один столбец  [new]
Elic
Member

Откуда:
Сообщений: 29991
RTFM Analytic Functions (FAQ)
25 июн 18, 12:48    [21518331]     Ответить | Цитировать Сообщить модератору
 Re: Не могу сообразить, как присоединить еще один столбец  [new]
gmikhailov
Member

Откуда:
Сообщений: 5
Прочитал мануал. Попробовал. Все равно не получается.
Если в первую выборку добавлять аналитическую функцию, то естественно минимальный заказ считается по указанному в WHERE периоду.
Если поработать со второй выборкой, то получается слишком большое количество строк из-за оператора IN.
Прошу помочь.
Спасибо.
25 июн 18, 14:24    [21518693]     Ответить | Цитировать Сообщить модератору
 Re: Не могу сообразить, как присоединить еще один столбец  [new]
Elic
Member

Откуда:
Сообщений: 29991
gmikhailov
Попробовал.
Ошибка в 15-ой строке.
25 июн 18, 14:31    [21518716]     Ответить | Цитировать Сообщить модератору
 Re: Не могу сообразить, как присоединить еще один столбец  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2798
gmikhailov,

  1  select deptno,ename,hiredate
  2    ,min(hiredate) over (partition by deptno) old --присоединить еще и дату по каждому отделу
  3  from emp
  4* order by 1
SQL> /

    DEPTNO ENAME      HIREDATE OLD
---------- ---------- -------- --------
        10 CLARK      09.06.81 09.06.81
        10 KING       17.11.81 09.06.81
        10 MILLER     23.01.82 09.06.81
        20 JONES      02.04.81 17.12.80
        20 FORD       03.12.81 17.12.80
        20 ADAMS      12.01.83 17.12.80
        20 SMITH      17.12.80 17.12.80
        20 SCOTT      09.12.82 17.12.80
        30 WARD       22.02.81 20.02.81
        30 TURNER     08.09.81 20.02.81
        30 ALLEN      20.02.81 20.02.81
        30 JAMES      03.12.81 20.02.81
        30 BLAKE      01.05.81 20.02.81
        30 MARTIN     28.09.81 20.02.81

14 rows selected.


.....
stax
25 июн 18, 15:00    [21518846]     Ответить | Цитировать Сообщить модератору
 Re: Не могу сообразить, как присоединить еще один столбец  [new]
Egoр
Member

Откуда:
Сообщений: 835
SELECT P_CODE, P_UID, TO_DATE(TO_CHAR(P_TIMESLOTDELIVERYSTARTDATE,'DD.MM.YY')), P_TOTALPRICE, P_TIMESLOTCOSTZONE, P_STREETNAME,
       (SELECT MIN(ORDERS.CREATEDTS) FROM HYBRIS.ORDERS o1 WHERE o1.P_UID = o.P_UID) as first_order
FROM HYBRIS.ORDERS o
JOIN HYBRIS.USERS ON HYBRIS.ORDERS.P_USER = HYBRIS.USERS.PK
JOIN HYBRIS.ADDRESSES ON HYBRIS.ADDRESSES.PK = HYBRIS.ORDERS.P_DELIVERYADDRESS
WHERE HYBRIS.ORDERS.CREATEDTS BETWEEN '01.06.18 00:00:00,0' AND '25.06.18 23:59:59,0'
ORDER BY P_UID;
Не уверен, что поле P_UID из таблицы ORDERS.
25 июн 18, 15:03    [21518858]     Ответить | Цитировать Сообщить модератору
 Re: Не могу сообразить, как присоединить еще один столбец  [new]
gmikhailov
Member

Откуда:
Сообщений: 5
Egoр,

Спасибо большое,
чуть подкорректировал - теперь все ОК.
25 июн 18, 16:11    [21519081]     Ответить | Цитировать Сообщить модератору
 Re: Не могу сообразить, как присоединить еще один столбец  [new]
Elic
Member

Откуда:
Сообщений: 29991
Egoр
       (SELECT MIN(ORDERS.CREATEDTS) FROM HYBRIS.ORDERS o1 WHERE o1.P_UID = o.P_UID) as first_order
Тоже не владеешь аналитикой?
25 июн 18, 16:18    [21519092]     Ответить | Цитировать Сообщить модератору
 Re: Не могу сообразить, как присоединить еще один столбец  [new]
Egoр
Member

Откуда:
Сообщений: 835
Elic,

ТС нужен минимум на всем множестве заказов
25 июн 18, 16:22    [21519101]     Ответить | Цитировать Сообщить модератору
 Re: Не могу сообразить, как присоединить еще один столбец  [new]
XMLer
Member

Откуда:
Сообщений: 258
Egoр
Elic,
ТС нужен минимум на всем множестве заказов

А что мешает сначала найти первые заказы?
25 июн 18, 16:39    [21519157]     Ответить | Цитировать Сообщить модератору
 Re: Не могу сообразить, как присоединить еще один столбец  [new]
Egoр
Member

Откуда:
Сообщений: 835
XMLer
Egoр
Elic,
ТС нужен минимум на всем множестве заказов

А что мешает сначала найти первые заказы?
Где твой вариант?
25 июн 18, 17:30    [21519323]     Ответить | Цитировать Сообщить модератору
 Re: Не могу сообразить, как присоединить еще один столбец  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18390
Если задача не разовая, то рассмотрите добавление соответствующего атрибута в HYBRIS.USERS - это, среди прочего, спасет от неизбежного (для orders) housekeeping, способного убить все варианты вычислений по orders...
Если разовая или бросовая - то скалярный подзапрос вполне себе вариант.
25 июн 18, 17:37    [21519356]     Ответить | Цитировать Сообщить модератору
 Re: Не могу сообразить, как присоединить еще один столбец  [new]
XMLer
Member

Откуда:
Сообщений: 258
Egoр
XMLer
пропущено...

А что мешает сначала найти первые заказы?
Где твой вариант?

Лень, все же примитивно.
25 июн 18, 17:38    [21519360]     Ответить | Цитировать Сообщить модератору
 Re: Не могу сообразить, как присоединить еще один столбец  [new]
Egoр
Member

Откуда:
Сообщений: 835
XMLer
Egoр
пропущено...
Где твой вариант?

Лень, все же примитивно.
Ясен пень, что full table это примитивно.
25 июн 18, 17:45    [21519396]     Ответить | Цитировать Сообщить модератору
 Re: Не могу сообразить, как присоединить еще один столбец  [new]
Egoр
Member

Откуда:
Сообщений: 835
Elic
Egoр
       (SELECT MIN(ORDERS.CREATEDTS) FROM HYBRIS.ORDERS o1 WHERE o1.P_UID = o.P_UID) as first_order
Тоже не владеешь аналитикой?
Хошь, как хошь, но я не вижу, как ты предлагаешь заюзать аналитику в запросе ТС.
25 июн 18, 17:56    [21519438]     Ответить | Цитировать Сообщить модератору
 Re: Не могу сообразить, как присоединить еще один столбец  [new]
Elic
Member

Откуда:
Сообщений: 29991
Egoр
Хошь, как хошь, но я не вижу, как ты предлагаешь заюзать аналитику в запросе ТС.
Вопрос в том, что такое "первого заказа". Чтоб это лучше понять, нужно было под лупой разбирать 2-ой говнокод ...
25 июн 18, 18:08    [21519468]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить