第一次运行查询返回的数据与第二次和后续运行的数据不同

时间:2021-02-16 20:09:46

标签: sql oracle exadata

昨天安装了新的 oracle 服务器。 DB 已迁移到 exadata。之前运行良好的查询突然开始显示第一次运行和后续运行的不同结果。

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 | 548  | 548
-1 | 1708 | 1708
-1 | 1926 | 1926
---------------------

对于第二次和后续的运行

----------------------------
82584520 | 548  | 710
82142283 | 1708 | 1926
82377842 | 1926 | 1937
----------------------------

所有查询的计划都是一样的。可能是什么问题?

附言我认为这可能与不同的日期 NLS 设置有关,但我们进行了检查,结果与旧服务器上的情况相同。

1 个答案:

答案 0 :(得分:0)

正如 Gary Myers 在评论中所说,当“row_number 分析 PARTITION / ORDER BY 中的项目不是唯一的,那么根据查询计划不同的行可能是不同的排序并且 rn=1 可能是'选择具有该项目、loc 和 action_date 的任何行”。 根据我们的案例,问题是数据错误。

相关问题