powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Запрос SQL
25 сообщений из 34, страница 1 из 2
Запрос SQL
    #39628306
user2002
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
select x1.agr_no,
       x1.from_dat,
       p.tabn3,
       p.family3 Nume,
       p.name3 Prenume,
       o.name_podr23 name_podr23_actual,
       d.naim_dolj9 naim_dolj9_actual,
       (select (select pd.Name_Podr23
                  from podrs pd
                 where pd.code23 = pt.podr_code23)
          from paths pt
         where pt.person_tabn3 = p.tabn3
           and pt.dat_nazn16 =
               (select max(pt1.dat_nazn16)
                  from paths pt1
                 where pt1.person_tabn3 = pt.person_tabn3
                   and pt1.dat_nazn16 < x.dat_nazn161)) Name_Podr_prec,
       (select (select dj.naim_dolj9
                  from Doljnosts dj
                 where dj.code9 = pt.doljnost_code9)
          from paths pt
         where pt.person_tabn3 = p.tabn3
           and pt.dat_nazn16 =
               (select max(pt1.dat_nazn16)
                  from paths pt1
                 where pt1.person_tabn3 = pt.person_tabn3
                   and pt1.dat_nazn16 < x.dat_nazn161)) Dolj_prec,
       x.dat_nazn161
  from persons p,
       shtats s,
       podrs o,
       doljnosts d,
       (select max(t.dat_nazn16) as dat_nazn161, t.person_tabn3
          from paths t
         where t.dat_nazn16 between to_date('01.02.2018', 'dd.mm.yyyy') and
               to_date('28.02.2018', 'dd.mm.yyyy')
           and t.actual = '0'
         group by t.person_tabn3) x,
       (select a1.from_dat, a1.tabn, a1.agr_no
          from bars2.PS_AGRE_PERSONS a1
         where a1.agr_type = 'TWO'
           and trunc(a1.from_dat) = (select max(trunc(a.from_dat)) from_dat
                                       from PS_AGRE_PERSONS a
                                      where a.agr_type = 'TWO'
                                        and a.tabn = a1.tabn
                                      group by a.tabn)) x1
where p.dat_uvolnen3 is null
   and p.tabn3 = s.person_tabn3
   and s.podr_code23 = o.code23
   and s.doljnost_code9 = d.code9
   and p.tabn3 = x.person_tabn3
   and p.tabn3 = x1.tabn



Но проблема в том что в один день один человек перевелся на 2 разные местоположения работы , но так я тут использую
Код: plsql
1.
max(t.dat_nazn16)

то естественно одна строка теряется , уже голову сломал как можно исправить . Буду признателен за любой хинт.
...
Рейтинг: 0 / 0
Запрос SQL
    #39628308
user2002
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Цель : вывести всех информацию о рабочих за определенный месяц ( в данном случае февраль)

-Имя
-Фамилия
-Настоящее место работы
-Настоящяя должность
-Предыдущая место работы
-Предыдущая должность
-Дата изменений
...
Рейтинг: 0 / 0
Запрос SQL
    #39628311
merch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user2002,

Код: plsql
1.
ORA-00942: таблица или представление пользователя не существует
...
Рейтинг: 0 / 0
Запрос SQL
    #39628314
user2002
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
merch,

Зачем пытаетесь запустить его у себя ? Естественно он вам выдаст что у вас нет таблиц , но у меня они есть .
...
Рейтинг: 0 / 0
Запрос SQL
    #39628317
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user2002за любой хинт.rank/dense_rank = 1
...
Рейтинг: 0 / 0
Запрос SQL
    #39628324
user2002
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic,

Есть такое , спасибо пошел читать .
...
Рейтинг: 0 / 0
Запрос SQL
    #39628326
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user2002Но проблема в том что в один день один человек перевелся на 2 разные местоположения работы , но так я тут использую
Код: plsql
1.
max(t.dat_nazn16)

то естественно одна строка теряется , уже голову сломал как можно исправить . Буду признателен за любой хинт.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
...
 select max(t.dat_nazn16) as dat_nazn161, t.person_tabn3
          from paths t
         where t.dat_nazn16 between to_date('01.02.2018', 'dd.mm.yyyy') and
               to_date('28.02.2018', 'dd.mm.yyyy')
           and t.actual = '0'
         group by t.person_tabn3, "местоположение работы"
...
...
Рейтинг: 0 / 0
Запрос SQL
    #39628334
user2002
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dshedoouser2002Но проблема в том что в один день один человек перевелся на 2 разные местоположения работы , но так я тут использую
Код: plsql
1.
max(t.dat_nazn16)

то естественно одна строка теряется , уже голову сломал как можно исправить . Буду признателен за любой хинт.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
...
 select max(t.dat_nazn16) as dat_nazn161, t.person_tabn3
          from paths t
         where t.dat_nazn16 between to_date('01.02.2018', 'dd.mm.yyyy') and
               to_date('28.02.2018', 'dd.mm.yyyy')
           and t.actual = '0'
         group by t.person_tabn3, "местоположение работы"
...


Немного не понимаю как это должно работать , вручную прописывать место работы ? ТОгда не вариант , там очень много строк .

RANK() неплохой способ но нужно еще как-то внедрить его тут .
...
Рейтинг: 0 / 0
Запрос SQL
    #39628343
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user2002RANK() неплохой способ но нужно еще как-то внедрить его тут .Потерпи какое-то время. Сейчас Stax придет, покажет тебе несколько примеров.
...
Рейтинг: 0 / 0
Запрос SQL
    #39628346
user2002
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RANK() тоже не вариант , уж оченб большое количество строк которые запрос должен проверить . я вот думаю в сторону изменений в этом сегменте :

Код: plsql
1.
2.
3.
4.
select max(pt1.dat_nazn16)
                  from paths pt1
                 where pt1.person_tabn3 = pt.person_tabn3
                   and pt1.dat_nazn16 < x.dat_nazn161)) Name_Podr_prec,
...
Рейтинг: 0 / 0
Запрос SQL
    #39628349
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user2002Немного не понимаюЛучше сначала понять, что для быстрого получения ответа надо проявить минимальное уважение к отвечающим.

Вместо публикации полотна, где используются 10 таблиц, свести число таблиц до минимума и показать на конкректных данных что есть и что хочется получить.
Хотя, если бы ты это сделал, наверное и вопрос отпал бы сам собой.

Мало у кого есть желание ковыряться в чужих портянках, но и такие извращенцы здесь водятся.
...
Рейтинг: 0 / 0
Запрос SQL
    #39628353
user2002
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dbms_photoshop,

Я это все прекрасной понимаю , но в данном случае ( как мне кажется ) лучше предоставить весь запрос для его найлучшего понимания . Вопрос я думаю задан максимально коректно . А на счет уважение , тут вы неправы , уж извините . Я знаю что на это ресурсе сидят очень знающие в этой теме люди .
...
Рейтинг: 0 / 0
Запрос SQL
    #39628357
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user2002,

Коррелированный скаляр в коррелированном скаляре выглядит как плод больного воображения.
Чтобы понять психопата надо мыслить как психопат.
...
Рейтинг: 0 / 0
Запрос SQL
    #39628361
merch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshop
Лучше сначала понять, что для быстрого получения ответа надо проявить минимальное уважение к отвечающим.

Вместо публикации полотна, где используются 10 таблиц, свести число таблиц до минимума и показать на конкректных данных что есть и что хочется получить.
Хотя, если бы ты это сделал, наверное и вопрос отпал бы сам собой.

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


мой "тонкий" юмор ТС не понял. Спасибо.
...
Рейтинг: 0 / 0
Запрос SQL
    #39628368
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user2002( как мне кажется )

Есть пословица.
...
Рейтинг: 0 / 0
Запрос SQL
    #39628370
user2002
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне кажется мы немного отошли от моего вопроса , спасибо .
...
Рейтинг: 0 / 0
Запрос SQL
    #39628371
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user2002,

Код: plsql
1.
2.
3.
4.
5.
6.
with q(name, otdel, nazn) as (select 'Иванов', 'Продажники', to_date('01.04.2018','DD.MM.YYYY') from dual union all
select 'Петров', 'Продажники', to_date('02.04.2018','DD.MM.YYYY') from dual union all
select 'Иванов', 'Сварщики', to_date('03.04.2018','DD.MM.YYYY') from dual union all
select 'Иванов', 'Монтажники', to_date('03.04.2018','DD.MM.YYYY') from dual)

Select nazn, name from q where not exists (select * from q q1 where q1.nazn > q.nazn and q.name = q1.name)
...
Рейтинг: 0 / 0
Запрос SQL
    #39628372
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user2002,

Еще интересно что движет людьми, называющим таблицы persons и doljnosts.
Почему не persons and positions или ljudi и doljnost, если большая любовь к транслиту?

name и naim это все "имя"?
а family это фамилия, а не семья?

Предполагается, что нормальночу человеку понятны эти маразмы?
...
Рейтинг: 0 / 0
Запрос SQL
    #39628391
user2002
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dshedoo,

Я не имею информацию какие люди,должности там повторяются в один день .

dbms_photoshop,

Даже не хочу отвечать на этот вопрос .
...
Рейтинг: 0 / 0
Запрос SQL
    #39628408
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user2002RANK() неплохой способ но нужно еще как-то внедрить его тут .
перед внедрением надо еще и понять что хочем/надо получить

прикиньте, что человека перевели несколько раз за месяц, как тогда быть с Вашим max(t.dat_nazn16)?

даж решите Вы задачку по переходу работников (вывернитесь), так ж наверняка проблемка вылезет напр при расчете отпускных/больничных ...
опять же налоги, фонды и тд

зыы
рассмотрите возможность оформить второй перевод как работу по совместительству

зыы
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
  1  with paths(person_tabn3, dat_nazn16,cex) as (
  2  select 100,date '2018-02-01',5 from dual union all
  3  select 100,date '2018-02-10',6 from dual union all
  4  select 100,date '2018-02-10',36 from dual union all
  5  select 200,date '2018-02-17',5 from dual )
  6  select person_tabn3,dat_nazn16 dat_nazn161,cex from (
  7   select person_tabn3,dat_nazn16,cex
  8    ,rank() over (partition by t.person_tabn3 order by t.dat_nazn16 desc) r
  9            from paths t
 10           where t.dat_nazn16 between to_date('01.02.2018', 'dd.mm.yyyy') and
 11                 to_date('28.02.2018', 'dd.mm.yyyy')
 12  --           and t.actual = '0'
 13  --         group by t.person_tabn3, "местоположение работы"
 14* ) where r=1
SQL> /

PERSON_TABN3 DAT_NAZN        CEX
------------ -------- ----------
         100 10.02.18          6
         100 10.02.18         36
         200 17.02.18          5


.....
stax
...
Рейтинг: 0 / 0
Запрос SQL
    #39628462
user2002
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Staxприкиньте, что человека перевели несколько раз за месяц, как тогда быть с Вашим max(t.dat_nazn16)?


Если одного человека будут переводить чаще чем один раз за день то проблем не будет .

Staxперед внедрением надо еще и понять что хочем/надо получить


Проблема в том что у меня запрос игнорирует одну или несколько строк .

Тут:
Код: plsql
1.
2.
3.
4.
5.
select max(t.dat_nazn16) as dat_nazn161, t.person_tabn3
          from paths t
         where t.dat_nazn16 between to_date('01.02.2018', 'dd.mm.yyyy') and
               to_date('28.02.2018', 'dd.mm.yyyy')nd t.actual = '0' 
         group by t.person_tabn3) x,


Я заявляю что в
Код: plsql
1.
x.dat_nazn161

мы будем иметь значения от 01.02.2018-28.02.2018 .

Идем дальше ....

Тут:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select (select pd.Name_Podr23
                  from podrs pd
                 where pd.code23 = pt.podr_code23)
          from paths pt
         where pt.person_tabn3 = p.tabn3
           and pt.dat_nazn16 =
               (select max(pt1.dat_nazn16)
                  from paths pt1
                 where pt1.person_tabn3 = pt.person_tabn3
                   and pt1.dat_nazn16 < x.dat_nazn161)) Name_Podr_prec



И вот тут :
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select (select dj.naim_dolj9
                  from Doljnosts dj
                 where dj.code9 = pt.doljnost_code9)
          from paths pt
         where pt.person_tabn3 = p.tabn3
           and pt.dat_nazn16 =
               (select max(pt1.dat_nazn16)
                  from paths pt1
                 where pt1.person_tabn3 = pt.person_tabn3
                   and pt1.dat_nazn16 < x.dat_nazn161)) Dolj_prec



Мы берем тот самый
Код: plsql
1.
max(pt1.dat_nazn16)

и сравниваем с нашим
Код: plsql
1.
 x.dat_nazn161



В конец я получаю необходимые данные но не все , то есть я должен получить 2 строки состоящий из одинаковых значении во всех столбцах , кроме вышеперечисленных Name_Podr_prec и Dolj_prec
...
Рейтинг: 0 / 0
Запрос SQL
    #39628465
user2002
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
user2002Staxприкиньте, что человека перевели несколько раз за месяц, как тогда быть с Вашим max(t.dat_nazn16)?


Если одного человека будут переводить НЕ чаще чем один раз за день то проблем не будет .
...
Рейтинг: 0 / 0
Запрос SQL
    #39628493
user2002
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Разобрался , Stax , вам отдельное спасибо , именно ваш способ помог .
...
Рейтинг: 0 / 0
Запрос SQL
    #39628519
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user2002,

еще раз
1) работника (тн 100) за период between to_date('01.02.2018', 'dd.mm.yyyy') and to_date('28.02.2018', 'dd.mm.yyyy')
переводили два раза напр
05.02.2018 из цеха 5 в 9 и 15.02.2018 с 9 в 12, Вам надо последний перевод?

2) работника (тн 200) за период between to_date('01.02.2018', 'dd.mm.yyyy') and to_date('28.02.2018', 'dd.mm.yyyy')
переводили раз напр
06.02.2018 из цеха 5 в 9 и 20.02.2018 он устроился еще и в 12-й, Вам надо обе даты?

покажите как ето будет выглядить в paths

user2002
В конец я получаю необходимые данные но не все , то есть я должен получить 2 строки состоящий из одинаковых значении во всех столбцах , кроме вышеперечисленных Name_Podr_prec и Dolj_prec

если я правильно понял то

Код: plsql
1.
2.
3.
4.
5.
select max(t.dat_nazn16) as dat_nazn161, t.person_tabn3
          from paths t
         where t.dat_nazn16 between to_date('01.02.2018', 'dd.mm.yyyy') and
               to_date('28.02.2018', 'dd.mm.yyyy')nd t.actual = '0' 
         group by t.person_tabn3) x,


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

.....
stax
...
Рейтинг: 0 / 0
Запрос SQL
    #39628541
user2002
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,

Еще раз ,

Мне нужно

3) Работника (тн100) за период between to_date('01.02.2018', 'dd.mm.yyyy') and to_date('28.02.2018', 'dd.mm.yyyy')
переводили два раза : из цеха А в цех Б, а потом обратно , в один день , мне нужны обе записи .


Не знаю насколько это правильно но я сделал так :

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select (select dj.naim_dolj9
                  from Doljnosts dj
                 where dj.code9 = pt.doljnost_code9)
          from paths pt
         where pt.person_tabn3 = p.tabn3
           and pt.dat_nazn16 =
               (select max(pt1.dat_nazn16)
                  from paths pt1
                 where pt1.person_tabn3 = pt.person_tabn3
                   and pt1.dat_nazn16 < t.dat_nazn16)) Dolj_prec,


Внимание на последнюю строку.


Это подСелект , а в главном селекте добавил
Код: plsql
1.
t.dat_nazn16 between to_date('01.02.2018', 'dd.mm.yyyy') and to_date('28.02.2018', 'dd.mm.yyyy')
...
Рейтинг: 0 / 0
25 сообщений из 34, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Запрос SQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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