gpt4 book ai didi

sql - 在具有逻辑的 SELECT 语句中使用 MAX

转载 作者:行者123 更新时间:2023-12-02 00:26:04 25 4
gpt4 key购买 nike

简而言之,我需要获取某个部分的最新修订版。确定最新版本的标准是;

  • 如果所有部分都有 alpha 版本,则为基于 MAX 字母表的最新版本
  • 如果所有部分都有数字版本,则最新版本基于 MAX 数字
  • 如果部分有字母,部分有数字和字母,则最新版本为MAX字母表
  • 如果部分有字母,其他部分有数字,那么最新的将基于数字的最大值,忽略字母

这可能看起来有点模糊,但希望通过下面的代码会更加清晰。

DECLARE @PARTS TABLE
(
PART nvarchar(100),
PART_GENERIC nvarchar(100)
)

INSERT INTO @PARTS (PART, PART_GENERIC) VALUES ('B4294A', 'B4294')
INSERT INTO @PARTS (PART, PART_GENERIC) VALUES ('B4294B', 'B4294')
INSERT INTO @PARTS (PART, PART_GENERIC) VALUES ('B4294C', 'B4294')
INSERT INTO @PARTS (PART, PART_GENERIC) VALUES ('B4323001', 'B4323')
INSERT INTO @PARTS (PART, PART_GENERIC) VALUES ('B4323002', 'B4323')
INSERT INTO @PARTS (PART, PART_GENERIC) VALUES ('B4323003', 'B4323')
INSERT INTO @PARTS (PART, PART_GENERIC) VALUES ('N9648400A', 'N96484')
INSERT INTO @PARTS (PART, PART_GENERIC) VALUES ('N96484A', 'N96484')
INSERT INTO @PARTS (PART, PART_GENERIC) VALUES ('A11089100', 'A11089')
INSERT INTO @PARTS (PART, PART_GENERIC) VALUES ('A11089A', 'A11089')

SELECT PART_GENERIC, MAX(PART) FROM @PARTS GROUP BY PART_GENERIC

在上述规则1和2的情况下,使用MAX函数会得到想要的结果。棘手的部分是其他 2 条规则。

这些部分按上面的通用值分组,因此我正在寻找每个通用部分的最新修订版。

我已经设法做到了这一点,但它是在用户定义的函数中,并且在 SELECT 语句中使用时速度非常慢。因此,我想处理这个逻辑并输出一个包含通用值和零件最新修订版的表格。

上面的SELECT语句会输出;

A11089 A11089A

B4294 B4294C

B4323 B4323003

N96484 N96484A

当我需要它输出时;

A11089 **A11089100**

B4294 B4294C

B4323 B4323003

N96484 N96484A

最后一点,如果修订版是数字,则它是该部分的最后 3 个字符(例如 003,我知道严格来说这不是数字)。如果它是一个字母,它通常只是最后一个字符,例如一个

最佳答案

你可以试试这个——这是我能做到的最快速度:

select
part_generic,
isnull(
max(case when minorRevisionNumeric = 1 then part else null end),
max(case when minorRevisionNumeric = 0 then part else null end)
) as revision
from
(select
part,
part_generic,
isnumeric(replace(part, part_generic, '')) as minorRevisionNumeric
from
@parts
) y
group by
part_generic

我放了 isnumericreplace 所以你每行只做一次,然后在计算中使用它作为修订号。它适用于您提供的示例数据,但如果它不是您所寻找的完全正确的逻辑,我们可以随时从那里进行调整。

为了后代,这种语法只适用于 SQL Server。

关于sql - 在具有逻辑的 SELECT 语句中使用 MAX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8882055/

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