gpt4 book ai didi

php - MySQL:在组内枚举(Banana、1/Banana、2/Banana、3/Apple、1 ...)

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

我对一个查询进行了“分组”。这是对带有版本的技术部件的查询。

喜欢:

ID , GlobalID, Name         , DateCreated
413, 17, Masterscrew , 17.10.2014
421, 17, Masterscrew , 28.10.2014
482, 29, Bluescrew , 11.08.2014
519, 17, Masterscrew B, 01.12.2014

目标是执行一个查询,其结果如下:

GlobalID, Version, ID, Date
17, 1, Masterscrew, 413, 17.10.2014
17, 2, Masterscrew, 421, 28.10.2014
17, 3, Masterscrew B, 519, 01.12.2014
29, 1, Bluescrew, 482, 11.08.2014

面临的挑战是“版本”列。我可以对 MySQL 施展任何咒语来施展魔法吗?

最佳答案

这可以通过其中包含 @ID 变量的复杂查询之一来完成。

SELECT (@ID := IF(@Prev <> GlobalID, 1, @ID + 1)) version,
(@Prev := GlobalID) GlobalID,
Name,
ID,
STR_TO_DATE(DateCreated, '%d.%m.%Y') DateCreated
FROM parts,
( SELECT @ID := 0, @Prev := 0 ) A
ORDER BY GlobalID, ID

就可以了。 http://sqlfiddle.com/#!2/82a36/15/0

每次出现具有相同 GlobalID 值的新行时,@ID 变量都会递增,并在发生更改时重置为零。 @Prev 变量跟踪前一行的 GlobalID 值。

该行初始化这两个变量。

 ( SELECT @ID := 0, @Prev := 0 ) Init

请勿更改 SELECT 中前两列的顺序,否则查询将不再有效。 (这是一次严峻的 MySQL 黑客攻击;其他 RDMS 提供排名)。

关于php - MySQL:在组内枚举(Banana、1/Banana、2/Banana、3/Apple、1 ...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28288945/

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