gpt4 book ai didi

mysql - 如何使用多个子字符串和子查询来优化此查询

转载 作者:行者123 更新时间:2023-11-29 14:27:12 25 4
gpt4 key购买 nike

好的,我现在正在开发一个网站,该网站显示有关电子设备部件的信息。这些部分有时会进行修订。零件号保持不变,但它们会在零件号后附加 A、B、C 等,因此字母“越高”,它就越新。还添加了日期。所以表格看起来像这样:

------------------------------------------------------------
| Partcode | Description | Partdate |
------------------------------------------------------------
| 12345A | Some description 1 | 2009-11-10 |
| 12345B | Some description 2 | 2010-12-30 |
| 17896A | Some description 3 | 2009-01-12 |
| 12345C | Some description 4 | 2011-08-06 |
| 17896B | Some description 5 | 2009-07-10 |
| 12345D | Some description 6 | 2012-05-04 |
------------------------------------------------------------

我现在需要的是零件最新版本的数据。所以对于这个例子我需要:

12345D 和 17896B

一些人在我之前构建的查询是这样的:

SELECT substring(Partcode, 1, 5) AS Part,
(
SELECT pt.Partcode
FROM Parttable pt
WHERE substring(pt.PartCode, 1, 5) = Part
ORDER BY pt.Partdate DESC
LIMIT 0,1
),
(
SELECT pt.Description
FROM Parttable pt
WHERE substring(pt.PartCode, 1, 5) = Part
ORDER BY pt.Partdate DESC
LIMIT 0,1
),
(
SELECT pt.Partdate
FROM Parttable pt
WHERE substring(pt.PartCode, 1, 5) = Part
ORDER BY pt.Partdate DESC
LIMIT 0,1
)
FROM Parttable
GROUP BY Part

正如您所理解的,这个查询非常慢并且感觉效率很低。但我就是不知道如何优化这个查询。

所以我真的希望有人能帮忙。

提前致谢!

PS。我正在开发 MySQL 数据库,在有人询问之前,我无法更改数据库。

最佳答案

首先:为什么不将您的版本变量存储在单独的列中?这样您就不需要调用 substring 来首先提取它。如果您确实需要连接代码和版本,我认为在最后执行此操作是一个很好的做法。

然后,在您的位置,我将首先拆分代码和版本,然后在聚合查询中简单地使用max,例如:

SELECT code,max(version) FROM
(SELECT substring(Partcode, 5, 1) as code,
substring(Partcode, 1, 5) as version
FROM Parttable
)
AS part
GROUP BY code;

注意:我尚未测试此查询,因此您可能需要修复一些参数,例如子字符串索引。

关于mysql - 如何使用多个子字符串和子查询来优化此查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10732713/

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