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

Откуда:
Сообщений: 2
добрый день всем
помогите разобраться
есть табличка вида

id data
1 01.07.2010 15:06:24
1 01.07.2010 15:07:49
1 01.07.2010 21:12:36
1 02.07.2010 13:25:12
1 02.07.2010 13:37:34
1 02.07.2010 14:15:02
1 02.07.2010 14:40:32
1 02.07.2010 14:53:51
2 01.07.2010 11:11:42
2 01.07.2010 12:27:19
2 01.07.2010 12:30:35
2 01.07.2010 12:31:43
2 02.07.2010 8:13:50
2 02.07.2010 8:22:38
2 02.07.2010 8:31:49
2 02.07.2010 9:00:45


хотелось бы чтоб запрос выдавал в итоге что то вида

id min max
1 01.07.2010 15:06:24 01.07.2010 21:12:36
1 02.07.2010 13:25:12 02.07.2010 14:53:51
2 01.07.2010 11:11:42 01.07.2010 12:31:43
2 02.07.2010 8:13:50 02.07.2010 9:00:45
то есть - минимальное и максимальное время за сутки по каждому id
5 июл 10, 12:12    [9049611]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по группировке  [new]
AlexFF__|
Member

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

Свой вариант?
5 июл 10, 12:15    [9049634]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по группировке  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6727
sokol23rus,

PIVOT
5 июл 10, 12:19    [9049660]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по группировке  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6727
sokol23rus,

Хотя, чёт я туплю, банальный group by + UNpivot или смеха для забавы ради group by + union
5 июл 10, 12:21    [9049672]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по группировке  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18351
select id, min(data), max(data)
from ...
grouop by id, trunc(data,'DD')
5 июл 10, 12:25    [9049719]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по группировке  [new]
SQLap
Member [заблокирован]

Откуда:
Сообщений: 34063
with t as
(select 1 as id, sysdate as a from dual
 union all
 select 1, sysdate + 1/24 from dual
 union all
 select 1, sysdate + 4/24 from dual
 union all
 select 2, sysdate + 2/24 from dual
 union all
 select 2, sysdate + 3/24 from dual
   )
select id, aa from
(select * from
  (select max(a) as aa, id, trunc(a)  from t
    group by id, trunc(a))
  union all
  (select min(a), id, trunc(a)  from t
    group by id, trunc(a)) ) c
    order by c.id
  
5 июл 10, 12:30    [9049761]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по группировке  [new]
sokol23rus
Member

Откуда:
Сообщений: 2
спасибо с trunc помогло , pivot еще попробую )
5 июл 10, 12:40    [9049850]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по группировке  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6727
SQL>  with t as
  2   (
  3    select mod(level,10) id, sysdate-level dt from dual connect by level < 1001)
  4  select id,dt
  5   from
  6     (
  7      select t.id, max(t.dt) mxdt, min(t.dt) mndt
  8      from t
  9      group by id
 10    ) t
 11    unpivot (dt for value in (mxdt,mndt))
 12  order by id, dt;

        ID DT
---------- ---------
         0 09-OCT-07
         0 25-JUN-10
         1 18-OCT-07
         1 04-JUL-10
         2 17-OCT-07
         2 03-JUL-10
         3 16-OCT-07
         3 02-JUL-10
         4 15-OCT-07
         4 01-JUL-10
         5 14-OCT-07
         5 30-JUN-10
         6 13-OCT-07
         6 29-JUN-10
         7 12-OCT-07
         7 28-JUN-10
         8 11-OCT-07
         8 27-JUN-10
         9 10-OCT-07
         9 26-JUN-10

20 rows selected.

Перечитал условие внимательнее, нафиг там унпивот не нужен, обычный груп бай. Тьфу блин.
5 июл 10, 12:41    [9049855]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по группировке  [new]
UScorp
Member

Откуда: Кыргызстан
Сообщений: 141
with t as (
  select 1 as FID, to_date('01.07.2010 15:06:24', 'DD.MM.YYYY HH24:MI:SS') FDate from dual union all
  select 1, to_date('01.07.2010 15:07:49', 'DD.MM.YYYY HH24:MI:SS') from dual union all
  select 1, to_date('01.07.2010 21:12:36', 'DD.MM.YYYY HH24:MI:SS') from dual union all
  select 1, to_date('02.07.2010 13:25:12', 'DD.MM.YYYY HH24:MI:SS') from dual union all
  select 1, to_date('02.07.2010 13:37:34', 'DD.MM.YYYY HH24:MI:SS') from dual union all
  select 1, to_date('02.07.2010 14:15:02', 'DD.MM.YYYY HH24:MI:SS') from dual union all
  select 1, to_date('02.07.2010 14:40:32', 'DD.MM.YYYY HH24:MI:SS') from dual union all
  select 1, to_date('02.07.2010 14:53:51', 'DD.MM.YYYY HH24:MI:SS') from dual union all
  select 2, to_date('01.07.2010 11:11:42', 'DD.MM.YYYY HH24:MI:SS') from dual union all
  select 2, to_date('01.07.2010 12:27:19', 'DD.MM.YYYY HH24:MI:SS') from dual union all
  select 2, to_date('01.07.2010 12:30:35', 'DD.MM.YYYY HH24:MI:SS') from dual union all
  select 2, to_date('01.07.2010 12:31:43', 'DD.MM.YYYY HH24:MI:SS') from dual union all
  select 2, to_date('02.07.2010 8:13:50', 'DD.MM.YYYY HH24:MI:SS') from dual union all
  select 2, to_date('02.07.2010 8:22:38', 'DD.MM.YYYY HH24:MI:SS') from dual union all
  select 2, to_date('02.07.2010 8:31:49', 'DD.MM.YYYY HH24:MI:SS') from dual union all
  select 2, to_date('02.07.2010 9:00:45', 'DD.MM.YYYY HH24:MI:SS') from dual
) 
select 
  FID ID, 
  TO_DATE(TO_CHAR(lDATE, 'DD.MM.YYYY') || ' ' || MinTime, 'DD.MM.YYYY HH24:MI:SS') Min,
  TO_DATE(TO_CHAR(lDATE, 'DD.MM.YYYY') || ' ' || MaxTime, 'DD.MM.YYYY HH24:MI:SS') Max
FROM
  (
  select 
    FID, 
    TO_DATE(TO_CHAR(FDATE, 'DD.MM.YYYY'), 'DD.MM.YYYY') lDATE, 
    Min(TO_CHAR(FDATE, 'HH24:MI:SS')) MinTime, 
    Max(TO_CHAR(FDATE, 'HH24:MI:SS')) MaxTime 
  from t
    GROUP BY FID, TO_DATE(TO_CHAR(FDATE, 'DD.MM.YYYY'), 'DD.MM.YYYY')
  )
ORDER BY FID, lDATE
5 июл 10, 15:07    [9051089]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по группировке  [new]
AlexFF__|
Member

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

сурово )
5 июл 10, 15:11    [9051113]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по группировке  [new]
Akustik
Member

Откуда:
Сообщений: 66
UScorp

чо усложнять то?

with t as (
  select 1 as FID, to_date('01.07.2010 15:06:24', 'DD.MM.YYYY HH24:MI:SS') FDate from dual union all
  select 1, to_date('01.07.2010 15:07:49', 'DD.MM.YYYY HH24:MI:SS') from dual union all
  select 1, to_date('01.07.2010 21:12:36', 'DD.MM.YYYY HH24:MI:SS') from dual union all
  select 1, to_date('02.07.2010 13:25:12', 'DD.MM.YYYY HH24:MI:SS') from dual union all
  select 1, to_date('02.07.2010 13:37:34', 'DD.MM.YYYY HH24:MI:SS') from dual union all
  select 1, to_date('02.07.2010 14:15:02', 'DD.MM.YYYY HH24:MI:SS') from dual union all
  select 1, to_date('02.07.2010 14:40:32', 'DD.MM.YYYY HH24:MI:SS') from dual union all
  select 1, to_date('02.07.2010 14:53:51', 'DD.MM.YYYY HH24:MI:SS') from dual union all
  select 2, to_date('01.07.2010 11:11:42', 'DD.MM.YYYY HH24:MI:SS') from dual union all
  select 2, to_date('01.07.2010 12:27:19', 'DD.MM.YYYY HH24:MI:SS') from dual union all
  select 2, to_date('01.07.2010 12:30:35', 'DD.MM.YYYY HH24:MI:SS') from dual union all
  select 2, to_date('01.07.2010 12:31:43', 'DD.MM.YYYY HH24:MI:SS') from dual union all
  select 2, to_date('02.07.2010 8:13:50', 'DD.MM.YYYY HH24:MI:SS') from dual union all
  select 2, to_date('02.07.2010 8:22:38', 'DD.MM.YYYY HH24:MI:SS') from dual union all
  select 2, to_date('02.07.2010 8:31:49', 'DD.MM.YYYY HH24:MI:SS') from dual union all
  select 2, to_date('02.07.2010 9:00:45', 'DD.MM.YYYY HH24:MI:SS') from dual
) SELECT FID,
         MIN (FDATE) MinTime,
         MAX (FDATE) MaxTime
    FROM t
GROUP BY FID, TRUNC (FDATE)
ORDER BY FID, TRUNC (FDATE)
5 июл 10, 16:18    [9051701]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по группировке  [new]
UScorp
Member

Откуда: Кыргызстан
Сообщений: 141
Akustik,
Согласен.
Ну почти всегда так получается, сначало через ..опу, а потом только видишь более простые решения ;)
6 июл 10, 08:07    [9054237]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить