А где пятничная задачка?

hewlett21
Дата: 02.03.2007 16:06:59
????
mcureenab
Дата: 02.03.2007 16:14:34
hewlett21
????


Все порешали.
bgn
Дата: 02.03.2007 16:18:50
dmidek
Дата: 02.03.2007 16:22:06
Да и 29 февраля
по соседству ИМХО вполне подходит
hewlett21
Дата: 02.03.2007 16:22:21
bgn
http://sql.ru/forum/actualthread.aspx?tid=402674


не, это не от Elica, не годится.:)
Ловец Стрекоз
Дата: 02.03.2007 16:27:00
вот задачка из последних насущных. и кажется нетривиальная.
есть отношение один ко многим. назовём его машина->порядок сборки->запчасти
нужно определить массу деталей тех машин у которых был последним установлен капот

суть в том как решить это одним джойном... пока очевидно нужно джойнить два раза, первый чтобы узнать список машин у которых был последним установлен капот, вторым уже собственно агрегация по массе...
dmidek
Дата: 02.03.2007 16:29:41
Ловец Стрекоз
вот задачка из последних насущных. и кажется нетривиальная.
есть отношение один ко многим. назовём его машина->порядок сборки->запчасти
нужно определить массу деталей тех машин у которых был последним установлен капот

суть в том как решить это одним джойном... пока очевидно нужно джойнить два раза, первый чтобы узнать список машин у которых был последним установлен капот, вторым уже собственно агрегация по массе...


а можно with-ы ? :-)
Stax.
Дата: 02.03.2007 17:10:08
mcureenab
hewlett21
????

Все порешали.

раз все решили,
токо в виду разминки!!!

нужно ПРОСТОЕ решение из темы

постановка
таблица емп

Вывести максимальную max(sal) зарплату в отделе (deptno)
по мере (over) приема сотрудников на работу (HIREDATE)
select\ndeptno\n,ename\n,hiredate\n,sal\n,comm\n,max(sal) over (partition by deptno order by HIREDATE) mx\nfrom emp\norder by deptno,HIREDATE\n/
а также (KEEP DENSE_RANK )
кто (ename ) получал эту (mx) максимальную зарплату
-если несколько - то у кого больше надбавка (last order by job nulls first)
-если и их несколько то первого (max(ename)) по алфавиту (нлс пока не учитываем)

в один день могут принять несколько человек

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

если есть практические (срочные) вопросы,
луче отвечайте на них

не могу понять почему ограничили DENSE_RANK,
мож это и в доке отражено, но видать пропустил
......
stax
Ловец Стрекоз
Дата: 02.03.2007 17:21:58
with works as (
                select 'ВАЗ' as car,  'фара' as part, 1 as weight, sysdate+1 as wtime from dual union all 
                select 'ВАЗ' as car,  'капот' as part, 3 as weight, sysdate+2 as wtime from dual union all 
                select 'ВАЗ' as car,  'фара' as part, 1 as weight, sysdate+3 as wtime from dual union all 
                     
                select 'ГАЗ' as car,  'фара' as part, 1 as weight, sysdate+4 as wtime from dual union all 
                select 'ГАЗ' as car,  'фара' as part, 1 as weight, sysdate+5 as wtime from dual union all    
                select 'ГАЗ' as car,  'капот' as part, 45 as weight, sysdate+6 as wtime from dual union all 
                
                select 'МАЗ' as car,  'капот' as part, 3 as weight, sysdate+7 as wtime from dual union all 
                select 'МАЗ' as car,  'фара' as part, 1 as weight, sysdate+8 as wtime from dual union all 
                select 'МАЗ' as car,  'фара' as part, 1 as weight, sysdate+9 as wtime from dual           
  ) /*select car, sweight from
      (select car, part, sum(weight) over (partition by car) sweight, row_number() over (partition by car order by wtime desc) rn from works)
   where part='капот' and rn=1;*/

   
   select car, sum(weight) from works w1
   where car in (select car from works w2 where part='капот' and wtime=(select max(wtime) from works where car=w2.car group by car))
   group by car

первоначальное решение. простое и нужное в ремарках...
Stax.
Дата: 02.03.2007 17:24:27
Ловец Стрекоз
вот задачка из последних насущных. и кажется нетривиальная.
есть отношение один ко многим. назовём его машина->порядок сборки->запчасти
нужно определить массу деталей тех машин у которых был последним установлен капот

суть в том как решить это одним джойном... пока очевидно нужно джойнить два раза, первый чтобы узнать список машин у которых был последним установлен капот, вторым уже собственно агрегация по массе...

а KEEP не поможет?

ps
присоединяюсь
то с ремонтом авто полная
нужен пример
......
stax