powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помощь в написании запроса
8 сообщений из 8, страница 1 из 1
Помощь в написании запроса
    #39950769
Dmitry1521
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый вечер.
Помогите, пожалуйста, написать запрос.
Есть заказы грузового такси.
Есть столбец в формате datetime с временем начала заказа и 2 столбец с временем окончания заказа в формате datetime.
Также есть отдельный столбец с id_order - уникальный идентификатор заказа.

Задача:


Нужно написать запрос который выведет среднее время которое проходит между заказами
...
Рейтинг: 0 / 0
Помощь в написании запроса
    #39950788
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Студентам, желающим помощи .

Пример, как надо показать, что вы что-то сделали сами:

Код: plsql
1.
2.
3.
4.
5.
with tbl(col1,col2,col3) as (
select 1,'name1',to_date('11.02.1921','DD.MM.YYYY') from dual union all
select 2,'name2',to_date('11.02.1922','DD.MM.YYYY') from dual
)
select col2 from tbl
...
Рейтинг: 0 / 0
Помощь в написании запроса
    #39950814
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry1521,

что не получается?
Код: 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.
25.
SQL> ed
Wrote file afiedt.buf

  1  with t (id_taxi,db,de) as (
  2  select 1,to_date('23/04/2020 17:05','dd:mm:yyyy hh24:mi'),to_date('23/04/2020 18:00','dd:mm:yyyy hh24:mi') from dual union all
  3  select 1,to_date('23/04/2020 19:00','dd:mm:yyyy hh24:mi'),to_date('23/04/2020 20:00','dd:mm:yyyy hh24:mi') from dual union all
  4  select 1,to_date('24/04/2020 08:00','dd:mm:yyyy hh24:mi'),to_date('24/04/2020 10:15','dd:mm:yyyy hh24:mi') from dual union all
  5  select 2,to_date('23/04/2020 17:05','dd:mm:yyyy hh24:mi'),to_date('23/04/2020 18:00','dd:mm:yyyy hh24:mi') from dual union all
  6  select 2,to_date('24/04/2020 18:00','dd:mm:yyyy hh24:mi'),to_date('24/04/2020 19:11','dd:mm:yyyy hh24:mi') from dual
  7  )
  8  ,tt as (
  9  select
 10    id_taxi
 11   ,lead(db) over (partition by id_taxi order by db)-de d
 12  from t)
 13  select id_taxi,avg(d)*24 hh
 14  from tt
 15  where d is not null
 16* group by id_taxi
SQL> /

   ID_TAXI         HH
---------- ----------
         1        6.5
         2         24



.....
stax
...
Рейтинг: 0 / 0
Помощь в написании запроса
    #39951189
Dmitry1521
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,
Благодарю Вас, не получается потому что нет познаний в оконных функций, в частности, в прикладном их применении.
Не могли, пожалуйста, описать Ваших логику расчетов, эту строчку: lead(db) over (partition by id_taxi order by db)-de d
...
Рейтинг: 0 / 0
Помощь в написании запроса
    #39951200
Dmitry1521
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax, возвращает только пустые значения
...
Рейтинг: 0 / 0
Помощь в написании запроса
    #39951334
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Советы:

1. У нас нет ваших таблиц, поэтому предпочтительно приводить тестовые данные в виде with.
2. Если непонятна документация (хотя надо стараться начинать с нее и разбираться в ней), ищите не "oracle analytic functions", а "oracle analytic functions examples". И не торопитесь писать на форум, попробуйте разобраться в этих примерах сами.

Ответ:

Over - это окно, по которому работают обычные групповые функции. В данном случае оно статическое (в отличие от PRECEDING/FOLLOWING), и выдает то, что выдаст та же функция, если ее запустить по сгруппированному запросу. Хотя и с нюансами. Добавил для вас два столбца с примитивной функцией max, чтобы помочь.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
with t (id_taxi,db,de) as (
select 1,to_date('23/04/2020 17:05','dd:mm:yyyy hh24:mi'),to_date('23/04/2020 18:00','dd:mm:yyyy hh24:mi') from dual union all
select 1,to_date('23/04/2020 19:00','dd:mm:yyyy hh24:mi'),to_date('23/04/2020 20:00','dd:mm:yyyy hh24:mi') from dual union all
select 1,to_date('24/04/2020 08:00','dd:mm:yyyy hh24:mi'),to_date('24/04/2020 10:15','dd:mm:yyyy hh24:mi') from dual union all
select 2,to_date('23/04/2020 17:05','dd:mm:yyyy hh24:mi'),to_date('23/04/2020 18:00','dd:mm:yyyy hh24:mi') from dual union all
select 2,to_date('24/04/2020 18:00','dd:mm:yyyy hh24:mi'),to_date('24/04/2020 19:11','dd:mm:yyyy hh24:mi') from dual
)

select
  id_taxi, db, de
 ,lead(db) over (partition by id_taxi order by db)-de d,
 max(db) over (partition by id_taxi) ,
 max(db) over (partition by id_taxi order by db) 
from t
...
Рейтинг: 0 / 0
Помощь в написании запроса
    #39951892
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry1521
Stax,
Не могли, пожалуйста, описать Ваших логику расчетов, эту строчку: lead(db) over (partition by id_taxi order by db)-de d


время между заказами в моем понимании, это интервал между окончанием текущего и началом следующего заказов

для такси1
23/04/2020 18:00 по 23/04/2020 19:00 - 1 час
23/04/2020 20:00 по 24/04/2020 08:00 - 12 часов

среднее (1+12)/2=6.5 часов

аналогично для такси2

lead(db) over (partition by id_taxi order by db) - получить время начала следующего заказа
-de -отнять врема окончания текущего заказа -получим время простоя

зы
в жизни часто посложнее, напр
учитывать длительность смены
что делать с последним заказом и тд

....
stax
...
Рейтинг: 0 / 0
Помощь в написании запроса
    #39954120
Dmitry1521
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое всем спасибо за помощь, не ожидал, что так много добрых и отзывчивых людей на этом форуме)
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помощь в написании запроса
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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