Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Не могу сообразить, как присоединить еще один столбец / 16 сообщений из 16, страница 1 из 1
25.06.2018, 12:30
    #39665254
gmikhailov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу сообразить, как присоединить еще один столбец
Коллеги, добрый день.
Есть выборка по заказам за месяц

Код: plsql
1.
2.
3.
4.
5.
6.
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 - клиент

Появилась необходимость присоединить еще и дату первого заказа по каждому клиенту.
Пока на коленке сделал еще одну выборку:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
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;



Но, к сожалению агрегатная функция подразумевает группировку, а клиент мог сделать не один заказ.
Приходится вручную потом данные собирать.
Помогите пожалуйста сделать все в рамках одной выборки, к сожалению, у меня пока опыта маловато для написания таких выборок.
Заранее спасибо!
...
Рейтинг: 0 / 0
25.06.2018, 12:48
    #39665276
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу сообразить, как присоединить еще один столбец
...
Рейтинг: 0 / 0
25.06.2018, 14:24
    #39665353
gmikhailov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу сообразить, как присоединить еще один столбец
Прочитал мануал. Попробовал. Все равно не получается.
Если в первую выборку добавлять аналитическую функцию, то естественно минимальный заказ считается по указанному в WHERE периоду.
Если поработать со второй выборкой, то получается слишком большое количество строк из-за оператора IN.
Прошу помочь.
Спасибо.
...
Рейтинг: 0 / 0
25.06.2018, 14:31
    #39665363
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу сообразить, как присоединить еще один столбец
gmikhailovПопробовал.Ошибка в 15-ой строке.
...
Рейтинг: 0 / 0
25.06.2018, 15:00
    #39665380
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу сообразить, как присоединить еще один столбец
gmikhailov,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
  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
...
Рейтинг: 0 / 0
25.06.2018, 15:03
    #39665382
Egoр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу сообразить, как присоединить еще один столбец
Код: plsql
1.
2.
3.
4.
5.
6.
7.
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.
...
Рейтинг: 0 / 0
25.06.2018, 16:11
    #39665427
gmikhailov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу сообразить, как присоединить еще один столбец
Egoр,

Спасибо большое,
чуть подкорректировал - теперь все ОК.
...
Рейтинг: 0 / 0
25.06.2018, 16:18
    #39665432
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу сообразить, как присоединить еще один столбец
Egoр
Код: plsql
1.
       (SELECT MIN(ORDERS.CREATEDTS) FROM HYBRIS.ORDERS o1 WHERE o1.P_UID = o.P_UID) as first_order

Тоже не владеешь аналитикой?
...
Рейтинг: 0 / 0
25.06.2018, 16:22
    #39665434
Egoр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу сообразить, как присоединить еще один столбец
Elic,

ТС нужен минимум на всем множестве заказов
...
Рейтинг: 0 / 0
25.06.2018, 16:39
    #39665451
XMLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу сообразить, как присоединить еще один столбец
EgoрElic,
ТС нужен минимум на всем множестве заказов
А что мешает сначала найти первые заказы?
...
Рейтинг: 0 / 0
25.06.2018, 17:30
    #39665488
Egoр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу сообразить, как присоединить еще один столбец
XMLerEgoрElic,
ТС нужен минимум на всем множестве заказов
А что мешает сначала найти первые заказы?Где твой вариант?
...
Рейтинг: 0 / 0
25.06.2018, 17:37
    #39665493
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу сообразить, как присоединить еще один столбец
Если задача не разовая, то рассмотрите добавление соответствующего атрибута в HYBRIS.USERS - это, среди прочего, спасет от неизбежного (для orders) housekeeping, способного убить все варианты вычислений по orders...
Если разовая или бросовая - то скалярный подзапрос вполне себе вариант.
...
Рейтинг: 0 / 0
25.06.2018, 17:38
    #39665494
XMLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу сообразить, как присоединить еще один столбец
EgoрXMLerпропущено...

А что мешает сначала найти первые заказы?Где твой вариант?
Лень, все же примитивно.
...
Рейтинг: 0 / 0
25.06.2018, 17:45
    #39665497
Egoр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу сообразить, как присоединить еще один столбец
XMLerEgoрпропущено...
Где твой вариант?
Лень, все же примитивно.Ясен пень, что full table это примитивно.
...
Рейтинг: 0 / 0
25.06.2018, 17:56
    #39665498
Egoр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу сообразить, как присоединить еще один столбец
ElicEgoр
Код: plsql
1.
       (SELECT MIN(ORDERS.CREATEDTS) FROM HYBRIS.ORDERS o1 WHERE o1.P_UID = o.P_UID) as first_order

Тоже не владеешь аналитикой?Хошь, как хошь, но я не вижу, как ты предлагаешь заюзать аналитику в запросе ТС.
...
Рейтинг: 0 / 0
25.06.2018, 18:08
    #39665503
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу сообразить, как присоединить еще один столбец
EgoрХошь, как хошь, но я не вижу, как ты предлагаешь заюзать аналитику в запросе ТС.Вопрос в том, что такое "первого заказа". Чтоб это лучше понять, нужно было под лупой разбирать 2-ой говнокод ...
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Не могу сообразить, как присоединить еще один столбец / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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