powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Получение последних трех записей
25 сообщений из 35, страница 1 из 2
Получение последних трех записей
    #40134749
Aleks27
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет. Прошу помощи в получение последних трех записей. Сервер 8 версии.

Есть таблица история должностей, в ней дата начала и дата освобождения, личный номер.

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

Последнюю беру так:
Код: plsql
1.
2.
3.
4.
5.
Select i.dateBegin, i.dateEnd, i.naimFull
From ist_dlgn i
Where i.ln = :B_MAIN.LN
AND i.dateBegin < (Select MAX(dateBegin) FROM ist_dlgn Where i.ln = :B_MAIN.LN)
AND i.dateBegin = (Select MAX(dateEnd) FROM ist_dlgn Where i.ln = :B_MAIN.LN)


В вышеуказанном варианте выбирается последняя должность перед текущей, при использовании rownum выдаются три первые записи, сортировка не помогает. Прошу помощи!
Заранее благодарен.
...
Рейтинг: 0 / 0
Получение последних трех записей
    #40134751
Фотография Anton_Demin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleks27,

Код: plsql
1.
2.
3.
select * 
from (/*ваш запрос*/ order by )
where rownum<=3
...
Рейтинг: 0 / 0
Получение последних трех записей
    #40134758
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleks27

исключая текущую


понятие текущей, у каждого свое

раскройте смысл в разрезе dateBegin, dateEnd

.....
stax
...
Рейтинг: 0 / 0
Получение последних трех записей
    #40135017
Aleks27
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anton_Demin,

Читаем внимательно мое сообщение, сортировка не работает, в вашем варианте тоже.
...
Рейтинг: 0 / 0
Получение последних трех записей
    #40135018
Aleks27
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,

авторраскройте смысл в разрезе dateBegin, dateEnd
прошлые записи имеют и дату назначения и дату освобождения, текущая должность имеет только дату назначения.
...
Рейтинг: 0 / 0
Получение последних трех записей
    #40135024
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Должности могут совмещаться?
...
Рейтинг: 0 / 0
Получение последних трех записей
    #40135039
Shtirlitz33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так решение на поверхности и совсем просто в последних версиях с этим стало
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
with TEST_TAB AS
(
select sysdate-10 dt, 4 id, 'a' from dual UNION
select sysdate-5 dt, 3 id, 'b' from dual UNION
select sysdate dt, 1 id, 'last' from dual UNION
select sysdate-2 dt, 2 id, 'd' from dual UNION
select sysdate-20 dt, 5 id, 'e' from dual
)
select * from TEST_TAB
 ORDER BY DT desc
 OFFSET 1 ROW
 FETCH NEXT 3 ROWS ONLY;



просто order by правильно сделать нужно и все
...
Рейтинг: 0 / 0
Получение последних трех записей
    #40135061
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleks27
Anton_Demin,

Читаем внимательно мое сообщение, сортировка не работает, в вашем варианте тоже.

Код: 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.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
SQL> ed
Wrote file afiedt.buf

  1  with ist_dlgn (ln,naimFull,dateBegin, dateEnd, pos) as (
  2  select 1,'Aleks27',date '2018-01-01',date '2018-02-01','R' from dual union all
  3  select 1,'Aleks27',date '2018-02-01',date '2019-01-01','R' from dual union all
  4  select 1,'Aleks27',date '2019-01-01',date '2020-02-01','R' from dual union all
  5  select 1,'Aleks27',date '2020-02-01',date '2020-03-01','R' from dual union all
  6  select 1,'Aleks27',date '2020-03-01',date '2020-04-01','K' from dual union all
  7  select 1,'Aleks27',date '2020-04-01',date '2020-05-01','O' from dual union all
  8  select 1,'Aleks27',date '2020-05-01',null,'R' from dual union all
  9  --
 10  select 2,'Stax',date '2021-04-01',date '2021-05-01','O' from dual union all
 11  select 2,'Stax',date '2021-05-01',null,'R' from dual
 12  )
 13  select * from (
 14    select *
 15    from ist_dlgn i
 16    where
 17        ln=1
 18      and dateEnd is not null
 19      and pos<>'K'
 20    order by dateBegin DESC
 21  )
 22  where ROWNUM<=3
 23* order by dateBegin
SQL> /

        LN NAIMFUL DATEBEGIN  DATEEND    P
---------- ------- ---------- ---------- -
         1 Aleks27 01.01.2019 01.02.2020 R
         1 Aleks27 01.02.2020 01.03.2020 R
         1 Aleks27 01.04.2020 01.05.2020 O

SQL>



.....
stax
...
Рейтинг: 0 / 0
Получение последних трех записей
    #40135075
Aleks27
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Правильный Вася,

naimFull - название должности может быть одинаковым, но даты нет.
...
Рейтинг: 0 / 0
Получение последних трех записей
    #40135076
Aleks27
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shtirlitz33,

Версия сервера 8
...
Рейтинг: 0 / 0
Получение последних трех записей
    #40135077
Aleks27
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anton_Demin,

Код: plsql
1.
2.
3.
4.
select * 
from (SELECT MAX(dateBegin) FROM ist_dlgn order by dateBegin DESC )
where rownum<=3
and ln = :B_MAIN.LN


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

Такой запрос будет работать на 8 версии сервера?
...
Рейтинг: 0 / 0
Получение последних трех записей
    #40135087
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleks27
Anton_Demin,

Код: plsql
1.
2.
3.
4.
select * 
from (SELECT MAX(dateBegin) FROM ist_dlgn order by dateBegin DESC)
where rownum<=3
and ln = :B_MAIN.LN


Не работает сортировка оракл ругается, да и запрос не тот что нужен.
Такой запрос вернёт одну строку.
Как должна сработать сортировка для одной строки результата?
...
Рейтинг: 0 / 0
Получение последних трех записей
    #40135092
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleks27
Stax,

Такой запрос будет работать на 8 версии сервера?


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

Код: plsql
1.
2.
Аналитические функции, появившиеся в версии Oracle 8.1.6, создавались для реше-
ния именно этих задач.


тогда
Код: 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.
26.
27.
28.
29.
30.
31.
32.
33.
with ist_dlgn (ln,naimFull,dateBegin, dateEnd, pos) as (
select 1,'Aleks27',date '2018-01-01',date '2018-02-01','R' from dual union all
select 1,'Aleks27',date '2018-02-01',date '2019-01-01','R' from dual union all
select 1,'Aleks27',date '2019-01-01',date '2020-02-01','R' from dual union all
select 1,'Aleks27',date '2020-02-01',date '2020-03-01','R' from dual union all
select 1,'Aleks27',date '2020-03-01',date '2020-04-01','K' from dual union all
select 1,'Aleks27',date '2020-04-01',date '2020-05-01','O' from dual union all
select 1,'Aleks27',date '2020-05-01',null,'R' from dual union all
--
select 2,'Stax',date '2021-04-01',date '2021-05-01','O' from dual union all
select 2,'Stax',date '2021-05-01',null,'R' from dual 
)
select * from (
  select i.* 
   ,row_number() over (order by dateBegin DESC) rn
  from ist_dlgn i 
  where 
      ln=1
    and dateEnd is not null 
    and pos<>'K' 
--  order by dateBegin DESC
) 
where RN<=3
order by dateBegin
SQL> /

        LN NAIMFUL DATEBEGIN  DATEEND    P         RN
---------- ------- ---------- ---------- - ----------
         1 Aleks27 01.01.2019 01.02.2020 R          3
         1 Aleks27 01.02.2020 01.03.2020 R          2
         1 Aleks27 01.04.2020 01.05.2020 O          1

SQL>



если не отработает, перепишу без аналитики

ps
для 7-ки использовал group by, считая что он вернет упорядочкнные данные

pps
with точно не было
.....
stax
...
Рейтинг: 0 / 0
Получение последних трех записей
    #40135119
gpu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мовно использовать что то типа
FETCH FIRST 3 ROWS ONLY
оно позволяет использовать ORDER BY

SELECT first_name, last_name, salary
FROM hr.employees
ORDER BY salary DESC
FETCH FIRST 10 ROWS ONLY;
...
Рейтинг: 0 / 0
Получение последних трех записей
    #40135122
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gpu,

22435927

Версия сервера 8

там точно не было FETCH FIRST 10 ROWS ONLY;

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

naimFull - название должности может быть одинаковым, но даты нет.

Вопрос бы о другом. О совмещении должностей.
Т.е. когда в один момент времени может быть несколько должностей у одного человека (не обязательно одинаковой длины промежутки наличия должности). Например, ведущий программист с 1 января И замначальника отдела с 1 февраля (оставаясь при этом и ведущим программистом тоже).
...
Рейтинг: 0 / 0
Получение последних трех записей
    #40135336
Aleks27
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Правильный Вася,

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

не работает такой запрос, совсем ((((
...
Рейтинг: 0 / 0
Получение последних трех записей
    #40135603
Aleks27
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Неужели нет решения? Вывести три записи последние....
...
Рейтинг: 0 / 0
Получение последних трех записей
    #40135609
oragraf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleks27
Неужели нет решения? Вывести три записи последние....

just for think
Код: plsql
1.
2.
3.
4.
5.
6.
with p(id,dt,val) as
 (select 4, sysdate-0, 'Паследний, мамой клянус!' from dual union all
  select 3, sysdate-1, 'Придпаслэдний' from dual union all
  select 2, sysdate-2, 'Ищщо одын, брят' from dual union all
  select 1, sysdate-3, 'Сами перьвы, брят!' from dual)
select * from p where 3>= (select count(*) from p p1 where p1.dt >= p.dt );
...
Рейтинг: 0 / 0
Получение последних трех записей
    #40135618
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleks27
Stax,

не работает такой запрос, совсем ((((

покажите ошибку

.....
stax
...
Рейтинг: 0 / 0
Получение последних трех записей
    #40135636
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleks27
Неужели нет решения? Вывести три записи последние....

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
select * from (
  select i.* 
  ,(select count(*)
    from ist_dlgn ii 
    where 
          ln=1
      and dateEnd is not null 
      and pos<>'K' 
      and ii.datebegin>=i.datebegin
  ) rn
  from ist_dlgn i 
  where 
      ln=1
    and dateEnd is not null 
    and pos<>'K' 
)  where rn<=3
order by datebegin  



datebegin уникальные, если нет допилить
.....
stax
...
Рейтинг: 0 / 0
Получение последних трех записей
    #40135657
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аналитика в 8.1 в пакетах была только в динамике
...
Рейтинг: 0 / 0
Получение последних трех записей
    #40135792
Aleks27
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,


Stax
Aleks27
Stax,

не работает такой запрос, совсем ((((

покажите ошибку

.....
stax

работаю в sql навигаторе ругается на with
...
Рейтинг: 0 / 0
25 сообщений из 35, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Получение последних трех записей
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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