powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите с запросиком (аналитическая функция???)
9 сообщений из 59, страница 3 из 3
Помогите с запросиком (аналитическая функция???)
    #39728398
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rushchelElicпропущено...
А смысл?Зачем?Раз смысла не видишь, то зачем бисеришь?
...
Рейтинг: 0 / 0
Помогите с запросиком (аналитическая функция???)
    #39728407
rushchel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elicrushchelпропущено...
Зачем?Раз смысла не видишь, то зачем бисеришь?Я тебя не понимаю. Хочешь что-то сказать - пиши прямо.
...
Рейтинг: 0 / 0
Помогите с запросиком (аналитическая функция???)
    #39728648
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SkilledJuniorSY,

У него тяжелый случай, условие можно поставить только в CASE WHEN, сам запрос зашит в приложении и поменять он его не может.


И что? Как ты думаешь столько раз оракл выполнит subquery M и сколько раз он будет в ней искать?

SY.
...
Рейтинг: 0 / 0
Помогите с запросиком (аналитическая функция???)
    #39728650
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYКак ты думаешь столько раз оракл выполнит subquery в EXISTS correlated subquery
...
Рейтинг: 0 / 0
Помогите с запросиком (аналитическая функция???)
    #39728669
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicSYКак ты думаешь столько раз оракл выполнит subquery в EXISTS correlated subquery

M не correlated, ну а вообще-то можно:

Код: 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.
SQL> explain plan for
  2  SELECT  id
  3  FROM   (SELECT  id
  4              ,   (CASE WHEN EXISTS
  5                            (with m as (select /*+ materialize */ min(id) keep (dense_rank first order by d) id
  6                                              from  (select id, idx, d, sum(flag) over(order by id) grp from tbl)
  7                                              group by grp, idx, trunc(d))
  8                             select 1 from m where t.id = m.id)
  9                        THEN 1
 10                        ELSE 0
 11                   END) cond
 12          FROM tbl t
 13          )
 14  WHERE  cond = 1
 15  /

Explained.

SQL> select * from table(dbms_xplan.display)
  2  /

PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 2529294160

-------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                                 | Name                        | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                          |                             |    17 |    51 |    63  (27)| 00:00:01 |
|*  1 |  FILTER                                   |                             |       |       |            |          |
|   2 |   TABLE ACCESS FULL                       | TBL                         |    17 |    51 |     3   (0)| 00:00:01 |
|   3 |   TEMP TABLE TRANSFORMATION               |                             |       |       |            |          |
|   4 |    LOAD AS SELECT (CURSOR DURATION MEMORY)| SYS_TEMP_0FD9D67AC_C67C599D |       |       |            |          |
|   5 |     SORT GROUP BY                         |                             |    17 |   629 |     5  (40)| 00:00:01 |
|   6 |      VIEW                                 |                             |    17 |   629 |     4  (25)| 00:00:01 |
|   7 |       WINDOW SORT                         |                             |    17 |   272 |     4  (25)| 00:00:01 |
|   8 |        TABLE ACCESS FULL                  | TBL                         |    17 |   272 |     3   (0)| 00:00:01 |
|*  9 |    VIEW                                   |                             |    17 |   221 |     2   (0)| 00:00:01 |
|  10 |     TABLE ACCESS FULL                     | SYS_TEMP_0FD9D67AC_C67C599D |    17 |   221 |     2   (0)| 00:00:01 |
-------------------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter(CASE  WHEN  EXISTS (SELECT 0 FROM  (SELECT /*+ CACHE ("T1") */ "C0" "ID" FROM
              "SYS"."SYS_TEMP_0FD9D67AC_C67C599D" "T1") "M" WHERE "M"."ID"=:B1) THEN 1 ELSE 0 END =1)
   9 - filter("M"."ID"=:B1)

24 rows selected.

SQL> 



SY.
...
Рейтинг: 0 / 0
Помогите с запросиком (аналитическая функция???)
    #39728678
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или:

Код: 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.
53.
54.
SQL> explain plan for
  2  SELECT  id
  3  FROM   (SELECT  id
  4              ,   (CASE WHEN EXISTS
  5                            (select /*+ CACHE(M) */ 1 from (select  min(id) keep (dense_rank first order by d) id,row_number() ove
r(order by grp) rn
  6                                              from  (select id, idx, d, sum(flag) over(order by id) grp from tbl)
  7                                              group by grp, idx, trunc(d)) m
  8                                      where t.id = m.id)
  9                        THEN 1
 10                        ELSE 0
 11                   END) cond
 12          FROM tbl t
 13          )
 14  WHERE  cond = 1
 15  /

Explained.

SQL> select * from table(dbms_xplan.display)
  2  /

PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 2110295973

-------------------------------------------------------------------------------
| Id  | Operation              | Name | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------
|   0 | SELECT STATEMENT       |      |    17 |    51 |    46  (37)| 00:00:01 |
|*  1 |  FILTER                |      |       |       |            |          |
|   2 |   TABLE ACCESS FULL    | TBL  |    17 |    51 |     3   (0)| 00:00:01 |
|*  3 |   FILTER               |      |       |       |            |          |
|   4 |    SORT GROUP BY       |      |     1 |    37 |     5  (40)| 00:00:01 |
|   5 |     VIEW               |      |    17 |   629 |     4  (25)| 00:00:01 |
|   6 |      WINDOW SORT       |      |    17 |   272 |     4  (25)| 00:00:01 |
|   7 |       TABLE ACCESS FULL| TBL  |    17 |   272 |     3   (0)| 00:00:01 |
-------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter(CASE  WHEN  EXISTS (SELECT /*+ CACHE
              ("from$_subquery$_003") */ 0 FROM  (SELECT "ID" "ID","IDX" "IDX","D"
              "D",SUM("FLAG") OVER ( ORDER BY "ID" RANGE  BETWEEN  UNBOUNDED
              PRECEDING  AND  CURRENT ROW ) "GRP" FROM "TBL" "TBL")
              "from$_subquery$_003" GROUP BY "GRP","IDX",TRUNC(INTERNAL_FUNCTION("D"))
               HAVING MIN("ID") KEEP (DENSE_RANK FIRST  ORDER BY "D")=:B1) THEN 1
              ELSE 0 END =1)
   3 - filter(MIN("ID") KEEP (DENSE_RANK FIRST  ORDER BY "D")=:B1)

26 rows selected.

SQL> 



SY.
...
Рейтинг: 0 / 0
Помогите с запросиком (аналитическая функция???)
    #39728912
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KOT MATPOCKuHПока я проблему решил простым способом - создал функцию, которую и вызываю в <Условие>. Производительность оставляет желать лучшего...
Однако хотелось бы ...
Если функцию можно - то, быть может, можно и индекс?
Если да, то есть разные варианты.

Ну и не забываем про классику...
Изложите <Условие> в виде
Код: plsql
1.
2.
3.
4.
5.
                      1=1 then 0 end) cond 
         from t where 1=0
        union all 
<Тут любой устраивающий вариант, возвращающий "id, 1">
union all select 0, (case when 1=0


и наслаждайтесь.
...
Рейтинг: 0 / 0
Помогите с запросиком (аналитическая функция???)
    #39729024
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousНу и не забываем про классику...Инъекция...
...
Рейтинг: 0 / 0
Помогите с запросиком (аналитическая функция???)
    #39729152
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elicandrey_anonymousНу и не забываем про классику...Инъекция...
ессно :)
...
Рейтинг: 0 / 0
9 сообщений из 59, страница 3 из 3
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите с запросиком (аналитическая функция???)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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