Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Разные результаты при многократном запуске запроса / 7 сообщений из 7, страница 1 из 1
16.02.2021, 18:25
    #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
16.02.2021, 18:45
    #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
16.02.2021, 22:52
    #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
16.02.2021, 23:01
    #40046033
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разные результаты при многократном запуске запроса
Первое попавшиеся (row_number() = 1) не попало.
...
Рейтинг: 0 / 0
16.02.2021, 23:08
    #40046034
кит северных морей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разные результаты при многократном запуске запроса
.
...
Рейтинг: 0 / 0
17.02.2021, 02:06
    #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
17.02.2021, 10:01
    #40046089
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разные результаты при многократном запуске запроса
jrqq4-h7h2v,

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

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


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