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

Откуда:
Сообщений: 41
Здрассте!!такая проблема возникла.делаю выборку по поставщикам,материалам,названию материала,статус,цена,дата утверждения(сор за подобного рода грамматику).так вот все норм.в выборке материал один и тот же,но разные поставщики,цена,статус и дата.подскажите плиз как можно отсортировать по максимальной цене для каждого поставщика мою выборку?????
11 сен 14, 15:33    [16564424]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плиз с запросом!!!  [new]
genikoff
Member

Откуда:
Сообщений: 41
genikoff
Здрассте!!такая проблема возникла.делаю выборку по поставщикам,материалам,названию материала,статус,цена,дата утверждения(сор за подобного рода грамматику).так вот все норм.в выборке материал один и тот же,но разные поставщики,цена,статус и дата.подскажите плиз как можно отсортировать по максимальной цене для каждого поставщика мою выборку?????

то есть для одного и того же поставщика может быть несколько записей(отличаются лишь только датой утверждения,статусом и ценой).пробовал ранжировать с помощью dense_rank last... и тд но что то не выходит ниче путного)
11 сен 14, 15:35    [16564443]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плиз с запросом!!!  [new]
kaldorey
Member

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

Немного непонятно, что тебе нужно, хотя бы пример из пары-тройки строк сделай
11 сен 14, 15:44    [16564551]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плиз с запросом!!!  [new]
genikoff
Member

Откуда:
Сообщений: 41
kaldorey,щас подождите)
11 сен 14, 15:46    [16564564]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плиз с запросом!!!  [new]
genikoff
Member

Откуда:
Сообщений: 41
структура такая.колонки такие:поставщик,код материала,название материала,статус,дата утверждения,цена.
Допустим,будет выглядеть так
aaa,001,азот,1,01.01.2013,3000
aaa,001,азот,0,15.07.2012,2500
bbb,002,глицерин,1,10.10.2013,100
bbb,002,глицерин,1,10.11.2013,200
статус-это либо 1 либо 0.(утвержденный и нейтвержденный)
11 сен 14, 15:52    [16564605]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плиз с запросом!!!  [new]
genikoff
Member

Откуда:
Сообщений: 41
коряво конечно набрасал,вы уж не обессудьте))
11 сен 14, 15:53    [16564611]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плиз с запросом!!!  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6727
STFF как следует задавать вопросы по sql
11 сен 14, 15:54    [16564626]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плиз с запросом!!!  [new]
genikoff
Member

Откуда:
Сообщений: 41
env
STFF как следует задавать вопросы по sql
эх.ну щас так попробую написать)
11 сен 14, 15:56    [16564641]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плиз с запросом!!!  [new]
genikoff
Member

Откуда:
Сообщений: 41
SELECT /*DISTINCT*/ ent.name " ПОСТАВЩИК",
                M.PLCODE "ЗАВОДСКОЙ КОД",
                M.NAME "НАЗВАНИЕ",
                M.MATNAME "МАРКА",
                M.PROFILE  "ПРОФИЛЬ",
                M.PROFSTD "СТАНДАРТ НА ПРОФИЛЬ",
                M.TU "ТЕХНИЧЕСКИЕ УСЛОВИЯ",
                M.GABARIt "ГАБАРИТЫ",
                e.VALUE "ЦЕНА",
                e.PROJECt "УТВЕРЖДЕННАЯ\НЕУТВЕРЖДЕННАЯ",
                mm.shortname "ЕД. ИЗМЕРЕНИЯ",
                q.shortname "ВАЛЮТА",
                e.initdate "ДАТА СОГЛАСОВАНИЯ",
                e.notice "ПРИМЕЧАНИЕ"
                

  FROM omp_adm.PDLABELS A,
       omp_adm.MATERIALS M,
       omp_adm.STOCKOBJ S,
          omp_adm.currency q,
          omp_adm.measures mm,
          omp_adm.enterprise ent,
       omp_adm.PDPRICES E,
    
       (SELECT distinct ENTCODE "ENTCODE",
                        PDLABELCODE "PDLABELCODE",
                        TYPE "TYPE",
                        PROJECT "PROJECT",
                        MAX(INITDATE) "INITDATE"
          FROM omp_adm.PDPRICES
         WHERE 
         ((INITDATE <to_date('01.01.2014','dd.mm.yyyy')
         and initdate>to_date('01.01.2013','dd.mm.yyyy')
         AND 
         TYPE = 7 AND PROJECT in (0,1)))
         GROUP BY PDLABELCODE, TYPE, ENTCODE, PROJECT) A2
 WHERE 1 = 1
   AND A.TYPE = 3
   AND   E.PDLABELCODE = A.PDLABELCODE        
   AND A.ARTICLECODE = S.CODE
   AND S.BASETYPE = 1
   AND S.BASECODE = M.CODE
   AND E.TYPE IN (7) 
   and E.PDLABELCODE = A2.PDLABELCODE
   AND E.INITDATE = A2.InitDate
   AND (E.ENTCODE = A2.ENTCODE OR E.ENTCODE IS NULL)
   AND E.TYPE = A2.TYPE
   AND E.PROJECT = A2.PROJECT
       and e.value in (select /*distinct*/  max(e1.value) KEEP (DENSE_RANK last order by e1.value )over (partition by ent1.name,m.plcode ) max_value from  omp_adm.PDPRICES E1, omp_adm.enterprise ent1,omp_adm.currency q1,omp_adm.measures mm1
       where e1.entcode=ent1.entcode  and e1.currcode=q1.currcode and mm1.code=e1.meascode  )
  and e.currcode=q.currcode
  and mm.code=e.meascode
  and e.entcode=ent.entcode
  and m.plcode='1520000000002'
 ORDER BY m.plcode, e.PROJECT ASC
11 сен 14, 16:00    [16564664]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плиз с запросом!!!  [new]
genikoff
Member

Откуда:
Сообщений: 41
SELECT /*DISTINCT*/ ent.name " ПОСТАВЩИК",
                M.PLCODE "ЗАВОДСКОЙ КОД",
                M.NAME "НАЗВАНИЕ",
                M.MATNAME "МАРКА",
                M.PROFILE  "ПРОФИЛЬ",
                M.PROFSTD "СТАНДАРТ НА ПРОФИЛЬ",
                M.TU "ТЕХНИЧЕСКИЕ УСЛОВИЯ",
                M.GABARIt "ГАБАРИТЫ",
                e.VALUE "ЦЕНА",
                e.PROJECt "УТВЕРЖДЕННАЯ\НЕУТВЕРЖДЕННАЯ",
                mm.shortname "ЕД. ИЗМЕРЕНИЯ",
                q.shortname "ВАЛЮТА",
                e.initdate "ДАТА СОГЛАСОВАНИЯ",
                e.notice "ПРИМЕЧАНИЕ"
                

  FROM omp_adm.PDLABELS A,
       omp_adm.MATERIALS M,
       omp_adm.STOCKOBJ S,
          omp_adm.currency q,
          omp_adm.measures mm,
          omp_adm.enterprise ent,
       omp_adm.PDPRICES E,
    
       (SELECT distinct ENTCODE "ENTCODE",
                        PDLABELCODE "PDLABELCODE",
                        TYPE "TYPE",
                        PROJECT "PROJECT",
                        MAX(INITDATE) "INITDATE"
          FROM omp_adm.PDPRICES
         WHERE 
         ((INITDATE <to_date('01.01.2014','dd.mm.yyyy')
         and initdate>to_date('01.01.2013','dd.mm.yyyy')
         AND 
         TYPE = 7 AND PROJECT in (0,1)))
         GROUP BY PDLABELCODE, TYPE, ENTCODE, PROJECT) A2
 WHERE 1 = 1
   AND A.TYPE = 3
   AND   E.PDLABELCODE = A.PDLABELCODE        
   AND A.ARTICLECODE = S.CODE
   AND S.BASETYPE = 1
   AND S.BASECODE = M.CODE
   AND E.TYPE IN (7) 
   and E.PDLABELCODE = A2.PDLABELCODE
   AND E.INITDATE = A2.InitDate
   AND (E.ENTCODE = A2.ENTCODE OR E.ENTCODE IS NULL)
   AND E.TYPE = A2.TYPE
   AND E.PROJECT = A2.PROJECT
      [color=green] and e.value in (select /*distinct*/  max(e1.value) KEEP (DENSE_RANK last order by e1.value )over (partition by ent1.name,m.plcode ) max_value from  omp_adm.PDPRICES E1, omp_adm.enterprise ent1,omp_adm.currency q1,omp_adm.measures mm1
       where e1.entcode=ent1.entcode  and e1.currcode=q1.currcode and mm1.code=e1.meascode  [/color])
  and e.currcode=q.currcode
  and mm.code=e.meascode
  and e.entcode=ent.entcode
  and m.plcode='1520000000002'
 ORDER BY m.plcode, e.PROJECT ASC

[color=green][/color]
genikoff,
11 сен 14, 16:01    [16564669]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плиз с запросом!!!  [new]
genikoff
Member

Откуда:
Сообщений: 41
вот запрос собственно.меня смущает кусок запроса где используется dense_rank ,те
       and e.value in (select /*distinct*/  max(e1.value) KEEP (DENSE_RANK last order by e1.value )over (partition by ent1.name,m.plcode ) max_value from  omp_adm.PDPRICES E1, omp_adm.enterprise ent1,omp_adm.currency q1,omp_adm.measures mm1
       where e1.entcode=ent1.entcode  and e1.currcode=q1.currcode and mm1.code=e1.meascode  )
  
11 сен 14, 16:02    [16564680]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плиз с запросом!!!  [new]
genikoff
Member

Откуда:
Сообщений: 41
по ходу выполнения получается выборка которую я выше коряво набрасал))а мне нужно по кажому поставщику определенного матеириала выбрать запись с максимальной ценой.мот кто что умное подскажет?
11 сен 14, 16:04    [16564689]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плиз с запросом!!!  [new]
kaldorey
Member

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

Тебе надо избавиться от подзапроса, либо от "надзапроса", аналитические функции для того и нужны
11 сен 14, 16:29    [16564864]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плиз с запросом!!!  [new]
SergINI
Member

Откуда: Нью-Васюки
Сообщений: 6787
genikoff
по ходу выполнения получается выборка которую я выше коряво набрасал))а мне нужно по кажому поставщику определенного матеириала выбрать запись с максимальной ценой.мот кто что умное подскажет?

Group by
11 сен 14, 16:35    [16564914]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плиз с запросом!!!  [new]
genikoff
Member

Откуда:
Сообщений: 41
SergINI
genikoff
по ходу выполнения получается выборка которую я выше коряво набрасал))а мне нужно по кажому поставщику определенного матеириала выбрать запись с максимальной ценой.мот кто что умное подскажет?

Group by

group by ну прокатит.в записи одинаковые только поставщик и материал,остальное может быть разным
11 сен 14, 16:39    [16564945]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плиз с запросом!!!  [new]
genikoff
Member

Откуда:
Сообщений: 41
kaldorey
genikoff,

Тебе надо избавиться от подзапроса, либо от "надзапроса", аналитические функции для того и нужны

да суть в том что без вот этого подзапроса запрос нормально работал,но тем людям которым я пишу прогу,понадобилась вот такая еще доработка,а так как я не спец в области oracle,как пришла ко мне мысль так я ее и впихнул)я конечно понимаю что я все так коряво описал и преподнес,но мот как нить по конкретнее укажите на исправление запроса?
11 сен 14, 16:42    [16564969]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плиз с запросом!!!  [new]
kaldorey
Member

Откуда:
Сообщений: 600
SergINI
Group by


Остальные поля тоже Group by будешь?
11 сен 14, 16:45    [16564994]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плиз с запросом!!!  [new]
genikoff
Member

Откуда:
Сообщений: 41
kaldorey,не,не получиться,даты и статусы разные у записей могут быть.не прокатит group by
11 сен 14, 16:48    [16565022]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плиз с запросом!!!  [new]
kaldorey
Member

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

это я не тебе писал
11 сен 14, 16:56    [16565060]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плиз с запросом!!!  [new]
genikoff
Member

Откуда:
Сообщений: 41
kaldorey,упс,пардон)
11 сен 14, 16:58    [16565075]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плиз с запросом!!!  [new]
kaldorey
Member

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

надеюсь, это натолкнет тебя на мысль

with t as (
  select 'abidas' sup, 1000 price, 'гвоздь' mat, sysdate dat from dual
  union all select 'abidas' sup, 2000 price, 'гвоздь' mat, sysdate+1 dat from dual
  union all select 'nike' sup, 5000 price, 'мотыга' mat, sysdate dat from dual
  union all select 'nike' sup, 3000 price, 'мотыга' mat, sysdate+1 dat from dual
)
select sup ,price, mat, dat
from
(select t.*,
 dense_rank() over (partition by sup,mat order by price desc) rnk
 from t)
where rnk=1
11 сен 14, 17:07    [16565150]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плиз с запросом!!!  [new]
genikoff
Member

Откуда:
Сообщений: 41
kaldorey,
спасибо большое.буду завтра с этим разбираться,а то уже конец дня рабочего и голова уже ниче не соображает.
11 сен 14, 17:08    [16565161]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плиз с запросом!!!  [new]
SergINI
Member

Откуда: Нью-Васюки
Сообщений: 6787
genikoff
SergINI
пропущено...

Group by

group by ну прокатит.в записи одинаковые только поставщик и материал,остальное может быть разным

И что? Раньше же люди обходились ANSI SQL без всяких новомодных штучек.

kaldorey
Остальные поля тоже Group by будешь?

Остальные поля элементарно цепляются к сгруппированному запросу.
11 сен 14, 18:00    [16565455]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плиз с запросом!!!  [new]
Nemiss
Member

Откуда: Vladivostok
Сообщений: 4
Можно и без аналитики. RTFM KEEP

with t as (
  select 'abidas' sup, 1000 price, 'гвоздь' mat, sysdate dat from dual
  union all select 'abidas' sup, 2000 price, 'гвоздь' mat, sysdate+1 dat from dual
  union all select 'nike' sup, 5000 price, 'мотыга' mat, sysdate dat from dual
  union all select 'nike' sup, 3000 price, 'мотыга' mat, sysdate+1 dat from dual
)
Select sup, 
        max(price) keep (dense_rank last order by price asc) as price, 
        mat, 
        max(dat) keep (dense_rank last order by price asc) as dat 
 from t 
group by sup, mat;
12 сен 14, 03:47    [16566561]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плиз с запросом!!!  [new]
kaldorey
Member

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

спс, что-то я затупил, рассматривал только вариант автора с этим
12 сен 14, 07:11    [16566618]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить