Гость
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Получение последних трех записей / 25 сообщений из 35, страница 1 из 2
17.02.2022, 12:02
    #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
17.02.2022, 12:08
    #40134751
Anton_Demin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение последних трех записей
Aleks27,

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

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


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

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

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

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

авторраскройте смысл в разрезе dateBegin, dateEnd
прошлые записи имеют и дату назначения и дату освобождения, текущая должность имеет только дату назначения.
...
Рейтинг: 0 / 0
18.02.2022, 06:00
    #40135024
Правильный Вася
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение последних трех записей
Должности могут совмещаться?
...
Рейтинг: 0 / 0
18.02.2022, 08:04
    #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
18.02.2022, 09:43
    #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
18.02.2022, 10:54
    #40135075
Aleks27
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение последних трех записей
Правильный Вася,

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

Версия сервера 8
...
Рейтинг: 0 / 0
18.02.2022, 10:58
    #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
18.02.2022, 10:59
    #40135078
Aleks27
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение последних трех записей
Stax,

Такой запрос будет работать на 8 версии сервера?
...
Рейтинг: 0 / 0
18.02.2022, 11:29
    #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
18.02.2022, 11:45
    #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
18.02.2022, 12:45
    #40135119
gpu
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
18.02.2022, 12:49
    #40135122
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение последних трех записей
gpu,

22435927

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

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

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

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

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

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

не работает такой запрос, совсем ((((
...
Рейтинг: 0 / 0
21.02.2022, 13:00
    #40135603
Aleks27
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение последних трех записей
Неужели нет решения? Вывести три записи последние....
...
Рейтинг: 0 / 0
21.02.2022, 13:18
    #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
21.02.2022, 13:39
    #40135618
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение последних трех записей
Aleks27
Stax,

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

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

.....
stax
...
Рейтинг: 0 / 0
21.02.2022, 14:04
    #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
21.02.2022, 15:12
    #40135657
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение последних трех записей
Аналитика в 8.1 в пакетах была только в динамике
...
Рейтинг: 0 / 0
22.02.2022, 10:30
    #40135792
Aleks27
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение последних трех записей
Stax,


Stax
Aleks27
Stax,

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

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

.....
stax

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


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