gpt4 book ai didi

MYSQL:如何计算重复行并将标记附加到现有值

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

问题:MIDL 列应包含 (UL_ID, "x001"),x001 代表唯一的家庭。如果有重复的家庭,则 MIDL 的基数应保持不变,而第二个值增加 1(这意味着该地址上有多个家庭)。现在,我设法用最多 9 的数字作弊一段时间,因为我可以将基数设置为 (UL_ID, "x00") 并简单地为每个额外的重复项添加值,但是一旦超过 9,您最终会得到 x0010 ,而值不能超过 12 个字符。注意:在某些情况下,家庭数量会增加到 60 户。

之前:

ADDRESS                    MIDL              UL_ID
---------------------------------------------------
AŠKERČEVA ULICA 6 14044272
AŠKERČEVA ULICA 6 14044272
AŠKERČEVA ULICA 6 14044272
AŠKERČEVA ULICA 6A 14044264
AŠKERČEVA ULICA 7 14044299
BAZOVIŠKA ULICA 25 14037390
BELOKRIŠKA CESTA 10 17097687
BELOKRIŠKA CESTA 10 17097687
BELOKRIŠKA CESTA 10 17097687
BELOKRIŠKA CESTA 10 17097687

之后:

ADDRESS                    MIDL              UL_ID
----------------------------------------------------
AŠKERČEVA ULICA 6 14044272x001 14044272
AŠKERČEVA ULICA 6 14044272x002 14044272
AŠKERČEVA ULICA 6 14044272x003 14044272
AŠKERČEVA ULICA 6A 14044264x001 14044264
AŠKERČEVA ULICA 7 14044299x001 14044299
BAZOVIŠKA ULICA 25 14037390x001 14037390
BELOKRIŠKA CESTA 10 17097687x001 17097687
BELOKRIŠKA CESTA 10 17097687x002 17097687
BELOKRIŠKA CESTA 10 17097687x003 17097687
BELOKRIŠKA CESTA 10 17097687x004 17097687

更新

P.Salmon 想出了一个可行的解决方案

SELECT T.ADDRESS,
CONCAT(T.UL_ID,'x' ,lpad(IF(T.UL_ID <> @P,@RN:=1,@RN:=@RN+1),3,'0')) MIDL, T.UL_ID,
@P:=T.UL_ID P
FROM (SELECT @RN:=0,@P:=0) RN,T

最佳答案

如果您“设法用最多 9 的数字作弊一段时间,因为我可以将基数设置为 (UL_ID, "x00") 并使用游标简单地为每个附加重复项添加值”,您可以使用@Tim Biegeleisen 建议的行号像这样的东西

 SELECT T.ADDRESS,
CONCAT(T.UL_ID,'x' ,lpad(IF(T.UL_ID <> @P,@RN:=1,@RN:=@RN+1),3,'0')) midl,
T.UL_ID,
@P:=T.UL_ID P
FROM (SELECT @RN:=0,@P:=0) RN,T
ORDER BY T.UL_ID

如果您已经使用此方法,您可能只需要 concat..lpad 位。

使用地址相同

SELECT T.ADDRESS,
CONCAT(T.UL_ID,'x' ,lpad(IF(T.address <> @P,@RN:=1,@RN:=@RN+1),3,'0')) midl,
T.UL_ID,
@P:=T.address P
FROM (SELECT @RN:=0,@P:='') RN,T
ORDER BY T.address

结果

+----------+--------------+----------+----------+
| ADDRESS | midl | UL_ID | P |
+----------+--------------+----------+----------+
| CESTA 10 | 17097687x001 | 17097687 | CESTA 10 |
| CESTA 10 | 17097687x002 | 17097687 | CESTA 10 |
| CESTA 10 | 17097687x003 | 17097687 | CESTA 10 |
| CESTA 10 | 17097687x004 | 17097687 | CESTA 10 |
| ULICA 25 | 14037390x001 | 14037390 | ULICA 25 |
| ULICA 6 | 14044272x001 | 14044272 | ULICA 6 |
| ULICA 6 | 14044272x002 | 14044272 | ULICA 6 |
| ULICA 6 | 14044272x003 | 14044272 | ULICA 6 |
| ULICA 6A | 14044264x001 | 14044264 | ULICA 6A |
| ULICA 7 | 14044299x001 | 14044299 | ULICA 7 |
+----------+--------------+----------+----------+
10 rows in set (0.02 sec)

关于MYSQL:如何计算重复行并将标记附加到现有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40374389/

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