powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Разные результаты при многократном запуске запроса
7 сообщений из 7, страница 1 из 1
Разные результаты при многократном запуске запроса
    #40045939
jrqq4-h7h2v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день! Столкнулся с проблемой. Следующий запрос возвращает разные результаты при первом выполнении и последующих.

Код: sql
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.
SELECT CASE
         WHEN MAX(recommended_unit_retail) != MIN(recommended_unit_retail) THEN
          item
         ELSE
          '-1'
       END item
      ,MIN(recommended_unit_retail) min_ur
      ,MAX(recommended_unit_retail) max_ur
  FROM (SELECT item
              ,loc
              ,recommended_unit_retail
              ,action_date
          FROM (SELECT rps.item
                      ,rps.loc
                      ,rps.recommended_unit_retail
                      ,rps.action_date
                      --, row_number() over(PARTITION BY rps.item, rps.loc ORDER BY to_char(rps.action_date, 'dd.mm.yy') DESC
                      , row_number() over(PARTITION BY rps.item, rps.loc ORDER BY rps.action_date DESC
                        ) rn
                  FROM uda_item_lov uil
                  JOIN xxlm_recom_prc_storage rps
                    ON rps.item = uil.item
                   AND rps.status IN ('S', 'P')
                   AND rps.action_date <= trunc(SYSDATE + 1)
                  JOIN store s
                    ON s.store = rps.loc
                   AND s.district = 1
                   AND s.store_open_date IS NOT NULL
                   AND s.store_open_date <= trunc(SYSDATE)
                  JOIN item_loc il
                    ON il.item = rps.item
                   AND il.loc = rps.loc
                   AND il.status = 'A'
                 WHERE uil.uda_id = 5
                   AND uil.uda_value != 6
                   AND uil.item = ANY(82584520, 82142283, 82377842))
         WHERE rn = 1)
 GROUP BY item;



При первом запуске возвращает результат
---------------------
-1 | 548 | 548
-1 | 1708 | 1708
-1 | 1926 | 1926
---------------------

При последующих
----------------------------
82584520 | 548 | 710
82142283 | 1708 | 1926
82377842 | 1926 | 1937
----------------------------
Если преобразовать дату в строку, как в закомментированном коде, то результат возвращается всегда одинаковый. Подскажите, в чем может быть проблема?
...
Рейтинг: 0 / 0
Разные результаты при многократном запуске запроса
    #40045957
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разберитесь с типами данных.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
with t (s, d) as (
select '01.01.20', date '2020-01-01' from dual union all
select '01.01.22', date '2022-01-01' from dual union all
select '01.01.20', date '2020-01-01' from dual union all
select '01.02.20', date '2020-01-01' from dual
)
select t.d, row_number() over(order by d) rn1, row_number() over(order by s) rn2
 from t order by s
...
Рейтинг: 0 / 0
Разные результаты при многократном запуске запроса
    #40046030
jrqq4-h7h2v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тип данных там один - date. Конвертацию к строке привел для примера. Чтобы не было путаницы удалил комментарий из запроса.
Код: sql
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.
SELECT CASE
         WHEN MAX(recommended_unit_retail) != MIN(recommended_unit_retail) THEN
          item
         ELSE
          '-1'
       END item
      ,MIN(recommended_unit_retail) min_ur
      ,MAX(recommended_unit_retail) max_ur
  FROM (SELECT item
              ,loc
              ,recommended_unit_retail
              ,action_date
          FROM (SELECT rps.item
                      ,rps.loc
                      ,rps.recommended_unit_retail
                      ,rps.action_date
                      , row_number() over(PARTITION BY rps.item, rps.loc ORDER BY rps.action_date DESC
                        ) rn
                  FROM uda_item_lov uil
                  JOIN xxlm_recom_prc_storage rps
                    ON rps.item = uil.item
                   AND rps.status IN ('S', 'P')
                   AND rps.action_date <= trunc(SYSDATE + 1)
                  JOIN store s
                    ON s.store = rps.loc
                   AND s.district = 1
                   AND s.store_open_date IS NOT NULL
                   AND s.store_open_date <= trunc(SYSDATE)
                  JOIN item_loc il
                    ON il.item = rps.item
                   AND il.loc = rps.loc
                   AND il.status = 'A'
                 WHERE uil.uda_id = 5
                   AND uil.uda_value != 6
                   AND uil.item = ANY(82584520, 82142283, 82377842))
         WHERE rn = 1)
 GROUP BY item;


Вопрос остается тот же. Почему при первом запуске результат с -1, а при втором со значениями?
...
Рейтинг: 0 / 0
Разные результаты при многократном запуске запроса
    #40046033
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первое попавшиеся (row_number() = 1) не попало.
...
Рейтинг: 0 / 0
Разные результаты при многократном запуске запроса
    #40046034
Фотография кит северных морей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.
...
Рейтинг: 0 / 0
Разные результаты при многократном запуске запроса
    #40046051
Alexander Anokhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
jrqq4-h7h2v

Вопрос остается тот же. Почему при первом запуске результат с -1, а при втором со значениями?


Вероятно, по той же причине, почему такой запрос
setup
Код: plsql
1.
2.
3.
4.
create table t as 
select rownum n, 
       0 m
  from dual connect by level <= 10000;


Код: plsql
1.
2.
3.
4.
5.
6.
7.
select --+ parallel(2)
       rn, 
       n 
  from (select n, 
               row_number() over(order by m) rn
          from t)
 where rn = 1;


может возвращать разные результаты

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
        RN          N
---------- ----------
         1       7885

1 row selected. 

/

        RN          N
---------- ----------
         1       5914

1 row selected. 
...
Рейтинг: 0 / 0
Разные результаты при многократном запуске запроса
    #40046089
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jrqq4-h7h2v,

rps.item, rps.loc rps.action_date уникально?

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


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