Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Подзапрос / 25 сообщений из 28, страница 1 из 2
17.04.2019, 11:04
    #39802587
petrovichvanya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подзапрос
Добрый день написал запрос
Код: plsql
1.
2.
3.
4.
5.
6.
select k.rest from (select r.rest
                                   , r.liasid 
                              from brsliasrests r
                             order by r.restdate) k
                             where k.liasid = l.liasid
                               and rownum = 1)


где сразу сортирую данные, потом ограничиваю их по liasid(сравниваю с другой таблицей) и отбираю одну запись
Как можно реализовать, чтобы сразу ограничивать по liasid, потом сортировать и отбирать одну запись?
...
Рейтинг: 0 / 0
17.04.2019, 11:13
    #39802596
alex-ls
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подзапрос
petrovichvanya,

Код: plsql
1.
2.
3.
4.
5.
6.
select k.rest
from (select r.rest
        from brsliasrests r
        where r.liasid = l.liasid
        order by r.restdate) k
where rownum = 1)


Это?
...
Рейтинг: 0 / 0
17.04.2019, 11:20
    #39802603
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подзапрос
alex-lsЭто?STFF: Inlline view не может быть кор....
...
Рейтинг: 0 / 0
17.04.2019, 11:22
    #39802605
petrovichvanya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подзапрос
alex-ls,

не совсем, ваш вариант не рабочий "l.liasid: invalid indentifiet"
что заработало приходится выносить за скобки
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select 
       (select k.rest
          from (select r.rest, r.liasid
                  from brsliasrests r
               --  where r.liasid = l.liasid
                 order by r.restdate) k
                 where k.liasid = l.liasid
                   and rownum = 1) SumIn
from brslias l 


получается сразу идет сортировка и только потом ограничение по liasid, что не подходит
...
Рейтинг: 0 / 0
17.04.2019, 11:27
    #39802608
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подзапрос
petrovichvanyaчтобы сразу ограничивать по liasid, потом сортировать и отбирать одну запись?RTFM 1) lateral , 2) row_limiting_clause (FAQ)
...
Рейтинг: 0 / 0
17.04.2019, 11:31
    #39802617
alex-ls
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подзапрос
Elicalex-lsЭто?STFF: Inlline view не может быть кор....
"l" может быть например коллекцией с полем liasid, с какого перепугу это должен быть обязательно алиас, как ту позже выясняется?
...
Рейтинг: 0 / 0
17.04.2019, 11:32
    #39802620
alex-ls
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подзапрос
petrovichvanyaalex-ls,
не совсем, ваш вариант не рабочий "l.liasid: invalid indentifiet"
мой вариант рабочий, это Вы не весь запрос сразу привели. если l.liasid это например поле коллекции, то все работает
...
Рейтинг: 0 / 0
17.04.2019, 11:35
    #39802625
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подзапрос
alex-lsс какого перепугу это должен быть обязательно алиасСтаж плюс опыт позволяют зреть в корень.
...
Рейтинг: 0 / 0
17.04.2019, 11:37
    #39802627
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подзапрос
…, 3) FIRST/LAST
...
Рейтинг: 0 / 0
17.04.2019, 11:38
    #39802628
alex-ls
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подзапрос
Код: plsql
1.
2.
3.
4.
5.
6.
7.
 
      select k.rest
      from (select r.rest
              from brsliasrests r, brslias l
              where r.liasid = l.liasid
              order by r.restdate) k
      where rownum = 1


так?
...
Рейтинг: 0 / 0
17.04.2019, 11:40
    #39802634
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подзапрос
alex-lsтак?
Зачем так упрямо ещё глубже садиться в лужу?
...
Рейтинг: 0 / 0
17.04.2019, 11:42
    #39802639
alex-ls
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подзапрос
Elicalex-lsтак?
Зачем так упрямо ещё глубже садиться в лужу?
ну я же смайлик поставил! а говорил что опыт у тебя есть...
...
Рейтинг: 0 / 0
17.04.2019, 11:47
    #39802647
Dshedoo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подзапрос
Код: plsql
1.
2.
3.
4.
5.
      
select r.rest
  from brsliasrests r
where   exists (select 1 from brslias l where r.liasid = l.liasid)
and not exists (select 2 from brsliasrests r2 where r.liasid = r2.liasid and r.restdate < r2.restdate)
...
Рейтинг: 0 / 0
17.04.2019, 11:49
    #39802654
Dshedoo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подзапрос
Dshedoo
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
      
select r.rest
  from brsliasrests r
where   exists (select 1 from brslias l where r.liasid = l.liasid)
and not exists (select 2 from brsliasrests r2 where r.liasid = r2.liasid 


and r.restdate < r2.restdate)



Код: plsql
1.
2.
r.restdate < r2.restdate --DESC
r.restdate > r2.restdate --ASC
...
Рейтинг: 0 / 0
17.04.2019, 11:54
    #39802662
alex-ls
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подзапрос
Elic,

ладно, что-то мне стыдно перед вами стало

Код: plsql
1.
2.
select liasid, first_value(rest) over(partition by liasid order by restdate)
from brsliasrests
...
Рейтинг: 0 / 0
17.04.2019, 11:57
    #39802665
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подзапрос
alex-ls
Код: plsql
1.
over

Мимо.
...
Рейтинг: 0 / 0
17.04.2019, 12:04
    #39802669
petrovichvanya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подзапрос
Вы решили пойти по простому пути, которые вовсе не подходят
конструкция запроса такая
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
select 1,
         2,
         3,
         4,
         (select k.rest from (select r.rest
                                   , r.liasid 
                              from brsliasrests r
                             order by r.restdate) k
                             where k.liasid = l.liasid
                               and rownum = 1) as qwerty,
         5
 from brslias l
inner join test1 on (...)
inner join test2 on (...)
inner join test3 on (...)
where ...
...
Рейтинг: 0 / 0
17.04.2019, 12:16
    #39802679
alex-ls
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подзапрос
Elicalex-ls
Код: plsql
1.
over


Мимо.
brslias вообще не нужна по факту, данные из нее текущим запросом не берутся, поэтому можно пройтись только по brsliasrests, разве что группировку добавить. поэтому для каждого значения liasid ищем first/last с заданной сортировкой
...
Рейтинг: 0 / 0
17.04.2019, 12:21
    #39802682
alex-ls
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подзапрос
Код: plsql
1.
2.
3.
4.
5.
select liasid, max(rest)
from (
  select liasid, first_value(rest) over(partition by liasid order by restdate) rest
  from brsliasrests)
group by liasid
...
Рейтинг: 0 / 0
17.04.2019, 12:23
    #39802685
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подзапрос
petrovichvanya,

для не древніх версій
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select d.deptno,
 (select * from 
(select e.ename from emp e where e.deptno=d.deptno order by 1) t
 where rownum=1) t
from dept d
/
DEPTNO	E
10	CLARK
20	ADAMS
30	ALLEN



.....
stax
...
Рейтинг: 0 / 0
17.04.2019, 12:30
    #39802693
petrovichvanya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подзапрос
Stax,

d.deptno не определен, это на старых версиях так?
...
Рейтинг: 0 / 0
17.04.2019, 12:30
    #39802694
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подзапрос
petrovichvanyaконструкция запроса такая


если я правильно понял конструкцию
k.liasid = l.liasid надо чутку выше, перед order by r.restdate

....
stax
...
Рейтинг: 0 / 0
17.04.2019, 12:32
    #39802697
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подзапрос
petrovichvanyaStax,

d.deptno не определен, это на старых версиях так?

да 21864635

.....
stax
...
Рейтинг: 0 / 0
17.04.2019, 12:39
    #39802705
petrovichvanya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подзапрос
Stax,

с какой версии так уже можно писать?
...
Рейтинг: 0 / 0
17.04.2019, 12:41
    #39802706
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подзапрос
petrovichvanya,

для не очень древніх
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SQL> ed
Wrote file afiedt.buf

  1  select d.deptno,
  2  (select substr(min(to_char(hiredate,'yyyymmdd')||e.ename),9) e from emp e where e.deptno=d.deptno) e
  3* from dept d
SQL> /

    DEPTNO E
---------- ----------
        10 CLARK
        20 SMITH
        30 ALLEN
        40



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


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