powered by simpleCommunicator - 2.0.28     © 2024 Programmizd 02
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Получение последних трех записей
35 сообщений из 35, показаны все 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
Получение последних трех записей
    #40135793
Aleks27
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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 );


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

работаю в sql навигаторе ругается на with


with тестовые данные, чтоб не создавать табличку

убирайте блок with, его точно не было в древних версиях


.....
stax
...
Рейтинг: 0 / 0
Получение последних трех записей
    #40135878
oragraf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleks27
не работает, ругается на with
версия сервера 8
Переставь во from то!
...
Рейтинг: 0 / 0
Получение последних трех записей
    #40136327
Aleks27
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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 );


Убрал блок with, показывает ноль значений, поигрался со знаками и полями показывает либо все значения либо ноль :(
...
Рейтинг: 0 / 0
Получение последних трех записей
    #40136328
Aleks27
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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


не работает запрос, курсор показывает select и выдает ошибку: ORA-00936: отсутствует выражение, так как я не гуру в запросах, т о понять , что он хочет не могу. Подскажите.
...
Рейтинг: 0 / 0
Получение последних трех записей
    #40136332
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
with - это примерно то же, что test case в прилагаемом файле.

Сделайте похожий для своих таблиц, прогоните.

Код: 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.
C:\_work>sqlplus user1@DBOFFICEXE @1.sql

SQL*Plus: Release 11.2.0.2.0 Production on Fri Feb 25 07:30:19 2022

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

Enter password:

Connected to:
Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production


Table dropped.


Table created.


        ID DAT       TXT
---------- --------- --------------------------------------------
         4 25-FEB-22 Паследний, мамой клянус!
         3 24-FEB-22 Придпаслэдний
         2 23-FEB-22 Ищщо одын, брят


        ID DAT       TXT                                                  RN
---------- --------- -------------------------------------------- ----------
         2 23-FEB-22 Ищщо одын, брят                                       3
         3 24-FEB-22 Придпаслэдний                                         2
         4 25-FEB-22 Паследний, мамой клянус!                              1

    from tmp select tt
             *
ERROR at line 4:
ORA-00907: missing right parenthesis

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

Сделайте похожий для своих таблиц, прогоните.

Код: 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.
C:\_work>sqlplus user1@DBOFFICEXE @1.sql

SQL*Plus: Release 11.2.0.2.0 Production on Fri Feb 25 07:30:19 2022

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

Enter password:

Connected to:
Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production


Table dropped.


Table created.


        ID DAT       TXT
---------- --------- --------------------------------------------
         4 25-FEB-22 Паследний, мамой клянус!
         3 24-FEB-22 Придпаслэдний
         2 23-FEB-22 Ищщо одын, брят


        ID DAT       TXT                                                  RN
---------- --------- -------------------------------------------- ----------
         2 23-FEB-22 Ищщо одын, брят                                       3
         3 24-FEB-22 Придпаслэдний                                         2
         4 25-FEB-22 Паследний, мамой клянус!                              1

    from tmp select tt
             *
ERROR at line 4:
ORA-00907: missing right parenthesis




https://www.sql.ru/forum/actualfile.aspx?id=22438279] Приложенный файл (1.sql - 938bytes)

спасибо попробую
...
Рейтинг: 0 / 0
Получение последних трех записей
    #40136508
Aleks27
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Информация для тех кто знает и проходит мимо, да я новичок, на работе нет интернета, на работе нет никого кто еще знает pl/sql.
...
Рейтинг: 0 / 0
Получение последних трех записей
    #40136516
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleks27
Информация для тех кто знает и проходит мимо, да я новичок, на работе нет интернета, на работе нет никого кто еще знает pl/sql.
вам точно нужна такая работа? Ща инет даже в сёлах есть
...
Рейтинг: 0 / 0
35 сообщений из 35, показаны все 2 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Получение последних трех записей
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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