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

Откуда:
Сообщений: 95
всем здрвствуйте
есть таблица вида содержащая название ( title и name ) вуза в конкретном году (его переименовывали)
YEARTITLENAME
1990"Негосударственное образовательное учреждение""Институт экономики управления и права (г.Казань)"
2008"Частное образовательное учреждение""Институт экономики управления и права (г.Казань)"


wITH T  AS (SELECT 1990 as year  ,'Негосударственное образовательное учреждение' title, 'Институт экономики управления и права (г.Казань)' name from dual 
 union  select 2008 year,'Частное образовательное учреждение высшего профессионального образования' title,'Институт экономики управления и права (г.Казань)' name from dual) select t.* from t,

есть таблицы содержащие дату начала обучения docdate для конкретного студента т.е recordid
RECORDIDDOCDATE
10569"31.08.2005"

with  k  AS (SELECT 10569 as recordid  ,'31.08.2005' docdate  from dual )
 select k.* from k
STUDENTIDORDERIDYEAR
10569812010


и год обучения получается joinом двух таблиц по orderid
 with l  AS (SELECT 81 orderid,2010 year  from dual  )
  select l.* from l

ORDERIDYEAR
812010


STUDENTIDORDERID
1056981


with m  AS (SELECT 10569 as studentid  ,81 orderid  from dual  )
  select m.* from m





т.е
если последнее переименование вуза было в промежуток между годом начала обучения и годои конца обучения тогда надо достать из базы последнее название и предыдущеее название
и собрать строку вида 'старое название' переименовано в ' новое название' в 'год последнего переименования' году, а иначе null

т.е если год начала обучения к примеру равен 2005, год конца 2010 а год последнего переименования 2008 то должны получить строку
message
негосударственное образовательное учреждение Институт экономики управления и права (г.Казань) переименовано в частное образовательное учреждение " +
высшего профессионального образования Институт экономики управления и права (г.Казань) в 2008 году
2 ноя 10, 16:50    [9720108]     Ответить | Цитировать Сообщить модератору
 Re: max case и extract  [new]
JaRo
Member

Откуда:
Сообщений: 1659
ну если вы знает слово join, то в чем проблема?
2 ноя 10, 17:06    [9720252]     Ответить | Цитировать Сообщить модератору
 Re: max case и extract  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 6912
Получить название учреждения на дату началу обучения, потом на дату окончания, если они не совпадают, то склеить их + какой-то текст, иначе просто вывести название учереждения. Вроде все просто или нет?
2 ноя 10, 17:06    [9720257]     Ответить | Цитировать Сообщить модератору
 Re: max case и extract  [new]
usmazat
Member

Откуда:
Сообщений: 95
alex-ls, переименовывают то не каждый год
2 ноя 10, 17:29    [9720507]     Ответить | Цитировать Сообщить модератору
 Re: max case и extract  [new]
xtender
Member

Откуда: Мск
Сообщений: 5704
usmazat
alex-ls, переименовывают то не каждый год

ну и что...брать надо только последнее на дату и все
2 ноя 10, 18:15    [9720956]     Ответить | Цитировать Сообщить модератору
 Re: max case и extract  [new]
usmazat
Member

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

select   year, title,name,  LAG(title) OVER (    ORDER BY year asc  rows  between unbounded preceding and 1 preceding) prev_title,
LAG(name) OVER (  ORDER BY year asc rows between unbounded preceding and 1 preceding) prev_name
from rb_company_names  order by year desc
возле rows выдает
ORA-00907: missing right parenthesis
или я куда-то не в ту степь ушел?
3 ноя 10, 13:41    [9725037]     Ответить | Цитировать Сообщить модератору
 Re: max case и extract  [new]
bdsm_sql
Member

Откуда:
Сообщений: 948
скобку праву забыл
3 ноя 10, 13:42    [9725049]     Ответить | Цитировать Сообщить модератору
 Re: max case и extract  [new]
bdsm_sql
Member

Откуда:
Сообщений: 948
короче, для LAG нельяз писать ROWS BETWEEN, так как эта ф-ция смотрит лишь одну предыдущую строку

для ROWS BETWEEN пиши LAST_VALUE()
3 ноя 10, 13:50    [9725126]     Ответить | Цитировать Сообщить модератору
 Re: max case и extract  [new]
Elic
Member

Откуда:
Сообщений: 29979
bdsm_sql
короче, для LAG нельяз писать ROWS BETWEEN, так как эта ф-ция смотрит лишь одну предыдущую строку
Да-мсс... Сколько аргументов у LAG/LEAD-а?
3 ноя 10, 14:27    [9725430]     Ответить | Цитировать Сообщить модератору
 Re: max case и extract  [new]
bdsm_sql
Member

Откуда:
Сообщений: 948
Elic
bdsm_sql
короче, для LAG нельяз писать ROWS BETWEEN, так как эта ф-ция смотрит лишь одну предыдущую строку
Да-мсс... Сколько аргументов у LAG/LEAD-а?

какой-то из этих аргументов заставит ее смотреть не одну, а две?
3 ноя 10, 14:29    [9725450]     Ответить | Цитировать Сообщить модератору
 Re: max case и extract  [new]
usmazat
Member

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

мне в принципе одна предыдущая строчка и нужна . сейчас

select   year, title,name,  LAG(title) OVER (    ORDER BY year asc) prev_title,
LAG(name) OVER (  ORDER BY year asc ) prev_name
from rb_company_names  order by year desc 

выдает
YEARTITLENAMEPREV_TITLEPREV_NAME
2008"Частное образовательное учреждение""Институт экономики управления и права (г.Казань)""Негосударственное образовательное учреждение""Институт экономики управления и права (г.Казань)"
1990"Негосударственное образовательное учреждение""Институт экономики управления и права (г.Казань)"


а мне надо только

YEARTITLENAMEPREV_TITLEPREV_NAME
2008"Частное образовательное учреждение""Институт экономики управления и права (г.Казань)""Негосударственное образовательное учреждение""Институт экономики управления и права (г.Казань)"
3 ноя 10, 14:37    [9725512]     Ответить | Цитировать Сообщить модератору
 Re: max case и extract  [new]
xtender
Member

Откуда: Мск
Сообщений: 5704
usmazat,
как-то так:
WITH 
 t as (      select 1990 as year  ,'Негосударственное образовательное учреждение' title, 'Институт экономики управления и права (г.Казань)' name from dual 
       union select 2008 year,'Частное образовательное учреждение высшего профессионального образования' title,'Институт экономики управления и права (г.Казань)' name 
       from dual),
 st as (
         select 2007 year,'1' student from dual
   union select 2009 year,'2' student from dual
   union select 2010 year,'3' student from dual
 ),
 s as (
      select 
        t.year,
        t.title||'"'||t.name||'"'
           ||lag(' переименовано в '||t.title||'"'||t.name||'"') over(order by year)
           ||' в '||t.year||'г.' print
      from t order by t.year desc
 ),
 final as (
          select 
           st.student,st.year st_year,
           row_number() over(partition by (st.student) order by s.year desc) n
           ,s.*
          from st,s
          where s.year<st.year
 )
 select * from final
 where n=1
 order by student
3 ноя 10, 19:33    [9727428]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить