powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Выборка данных
10 сообщений из 10, страница 1 из 1
Выборка данных
    #39725484
John_Dorian
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, сразу прошу прощения возможно за глупый вопрос, sql запросы начал осваивать недавно.
В общем есть выгрузка в которой необходимо вывести номера договоров и последний процесс, который был по ним запущен. Что бы мне он мне выводил только последний запущенный процесс по договорам, я написал так:

where
cc.creditactual in ('1', '2')
and ela.dtime = (select max(dtime)
from execution_list_affect e
where e.oid=ela.oid)

Но некоторые договора не попадают в выборку, т.к. по ним нет запущенный процессов и если я дописываю

or (ela.dtime is null),

то в выборку попадают и закрытые договора, получается условие cc.creditactual in ('1', '2') не соблюдается.
Нагуглить решение не получилось (да, возможно плохо гуглил :С ), как можно прописать что бы в выгрузку попадали только открытые договора и без запущенных процессов по ним?
Спасибо!
...
Рейтинг: 0 / 0
Выборка данных
    #39725499
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
John_Dorianполучается условие cc.creditactual in ('1', '2') не соблюдается.


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
where
  cc.creditactual in ('1', '2')
  and (
           ela.dtime = (select max(dtime) 
                           from execution_list_affect e
                           where e.oid=ela.oid)
        or ela.dtime is null
         )   




.....
stax
...
Рейтинг: 0 / 0
Выборка данных
    #39725576
John_Dorian
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
StaxJohn_Dorianполучается условие cc.creditactual in ('1', '2') не соблюдается.


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
where
  cc.creditactual in ('1', '2')
  and (
           ela.dtime = (select max(dtime) 
                           from execution_list_affect e
                           where e.oid=ela.oid)
        or ela.dtime is null
         )   




.....
stax

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

and (
ww.state is null
or ww.state = '1'
)

но как оказалось есть и такие договора, которые должны попасть в выборку со ww.state = '2', и загвоздка в том, что если я напишу:

and (
ww.state is null
or ww.state in ('1', 2)
)

то попадут в выгрузку дублирующие строки по договорам у которых есть state и 1 или null.
Можно ли как то указать условия, что бы он выгружал со state = '2', только если нет 1 или null?
Это делается только через if-then-else?
Спасибо!
...
Рейтинг: 0 / 0
Выборка данных
    #39726037
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
John_DorianЭто делается только через if-then-else?
Аналитикой или агрегацией - на выбор.
...
Рейтинг: 0 / 0
Выборка данных
    #39726039
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
John_Dorian,

влоб

Код: plsql
1.
2.
3.
4.
5.
and (
   ww.state is null
or ww.state ='1'
or ww.state ='2' and not exists (select 1 from .... u where u.id=ww.id and (u.state is null or u.state='1')
)



.....
stax
...
Рейтинг: 0 / 0
Выборка данных
    #39726042
John_Dorian
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответы!
Завтра попробую.
...
Рейтинг: 0 / 0
Выборка данных
    #39726587
John_Dorian
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
StaxJohn_Dorian,

влоб

Код: plsql
1.
2.
3.
4.
5.
and (
   ww.state is null
or ww.state ='1'
or ww.state ='2' and not exists (select 1 from .... u where u.id=ww.id and (u.state is null or u.state='1')
)



.....
stax

Выгрузка стала корректной. Огромнейшее спасибо!
...
Рейтинг: 0 / 0
Выборка данных
    #39726714
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильно ли я понимаю, что если по дефолту всё выражение возьмётся в скобки, затем "OR" перепишется на ") OR (" и выполнится?

Например:
Код: plsql
1.
2.
3.
4.
5.
where cc.creditactual in ('1', '2') 
  and ela.dtime = sysdate
    or ela.dtime is null
  and ela.pole1 = 'TEXT'
    or ela.pole2 != ela.pole3


Грубо говоря, сначала всё обернётся в скобки:
Код: plsql
1.
2.
3.
4.
5.
(where cc.creditactual in ('1', '2') 
  and ela.dtime = sysdate
    or ela.dtime is null
  and ela.pole1 = 'TEXT'
    or ela.pole2 != ela.pole3)


Затем "OR" заменится на ") OR (":
Код: plsql
1.
2.
3.
4.
5.
(where cc.creditactual in ('1', '2') 
  and ela.dtime = sysdate
   ) or ( ela.dtime is null
  and ela.pole1 = 'TEXT'
   ) or ( ela.pole2 != ela.pole3)
...
Рейтинг: 0 / 0
Выборка данных
    #39726724
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DshedooГрубо говоря, сначала всё обернётся в скобки:
Затем "OR" заменится на ") OR (":

and имеет приоритет над or ( грубо говоря сначала and потом возможно и or)

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


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