gpt4 book ai didi

SQL UPDATE 使用规则优化查询

转载 作者:行者123 更新时间:2023-12-02 20:21:41 24 4
gpt4 key购买 nike

我有两个表FactLik(200万行)和UpdateStPrice(50万行)。我需要使用规则更新 FactLik 表。

更新StPrice

| PRODUCTKEY | WAREHOUSEKEY | STARTDATE |  ENDDATE | PRIORITY | UNITPRICE |
---------------------------------------------------------------------------
| 36975 | 6 | 20120630 | 20121011 | 0 | 395 |
| 36975 | 6 | 20121018 | 20291231 | 0 | 371 |
| 36975 | 6 | 20121126 | 20121211 | 120 | 313 |
| 36975 | 6 | 20121126 | 20121219 | 120 | 288 |
| 36975 | 6 | 20121212 | 20291231 | 120 | 313 |

FactLik

|  TIMEKEY | PRODUCTKEY | PRODUCTGROUPKEY | WAREHOUSEKEY |  PRICE |
-------------------------------------------------------------------
| 20121205 | 36975 | 89 | 6 | (null) |

更新 FactLik 行的规则

  1. 对于相同的 ProductKeyWarehouseKeyUpdateStPrice 行中查找 Priority 为 MAX 且 FactLik。 TimeKey 位于 StartDateEndDate 之间。
  2. 现在找到 StartDate 为 MAX 的行。
  3. 现在找到 EndDate 为 MIN 的行。

来自 UpdateStPrice 的预期结果:

| PRODUCTKEY | WAREHOUSEKEY | STARTDATE |  ENDDATE | PRIORITY | UNITPRICE |
---------------------------------------------------------------------------
| 36975 | 6 | 20121126 | 20121211 | 120 | 313 |

结果FactLik:

|  TIMEKEY | PRODUCTKEY | PRODUCTGROUPKEY | WAREHOUSEKEY |  PRICE |
-------------------------------------------------------------------
| 20121205 | 36975 | 89 | 6 | 313 |

<强> SmallFiddle

BigFiddle

我有My QUERY这是非常慢的,实际上她慢跑了12个多小时。我在两个表上都有一些索引(建议执行计划),但它们根本没有帮助:)

因此,如果您能帮助我优化此查询,我将非常感激。

最佳答案

我认为您只需从 UpdateStPrice 订购数据即可做到这一点:

UPDATE factlik
SET price =
(SELECT TOP 1 up.unitprice
FROM updatestprice up
WHERE up.productkey = factlik.productkey
AND up.warehousekey = factlik.warehousekey
AND factlik.timekey >= up.startdate
AND factlik.timekey <= up.enddate
ORDER BY priority desc, startdate desc, enddate
)

sqlfiddle here

关于SQL UPDATE 使用规则优化查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13978339/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com