gpt4 book ai didi

MySQL - 结合两条记录,每条记录的不同字段

转载 作者:行者123 更新时间:2023-11-29 02:00:36 25 4
gpt4 key购买 nike

我正在更新现有数据库以简化它并扩展其功能。我有一个表格如下:

ID  Parent  increment     info 1    info 2
1 103 0 25 1
2 103 1 4 2
3 103 2 45 5
4 103 3 13 7
5 115 0 17 5
6 115 1 23 3
7 116 0 22 2
8 116 1 1 1
9 116 2 7 3
10 117 0 19 4

我希望新表对每个“父”只包含一个记录,并且对于大多数字段,该记录应包含来自具有最大“增量”编号的父编号的记录中的数据,但对于信息 2它应该包含来自具有最小“增量”的记录的数据。

期望的输出如下:

ID  Parent  increment   info 1  info 2
4 103 3 13 1
6 115 1 23 5
9 116 2 7 2
10 117 0 19 4

这种选择性的记录合并在 Mysql 中可行吗?

我已经研究过使用 Group by Parent,但是有相当多的字段要带过来,所以我不确定它是否有效。我还查看了表自身的 LEFT OUTER JOIN 以突出显示每个父级中具有最大增量的记录,但这不允许我从具有相同父级但最小增量的记录中选择数据。

被难住了,非常感谢有人的帮助。

最佳答案

是的,你可以做到这一点。假设您在附加字段中只有 1 到 9 的值:

select t.*
from t join
(select left(parent, locate(' ', parent) - 1) as p,
MAX(parent) as maxparent,
max(len
from t
group by left(parent, locate(' ', parent))
) tp
on left(t.parent, locate(' ', t.parent) - 1) = tp.p
where t.parent = tp.maxparent

如果数字超过 9,则需要一些额外的操作,例如:

select *
from t join
(select left(parent, locate(' ', parent) - 1) as p,
max(SUBSTRING(parent, locate(' ', parent) + 1)) as maxval
from t
group by left(parent, locate(' ', parent))
) tp
on left(t.parent, locate(' ', t.parent) - 1) = tp.p
where t.parent = concate(tp.p, ' ', maxval)

修改后的数据结构:

select t.*
from t join
(select parent, MAX(increment) as maxi
from t
group by parent
) tp
on t.parent = tp.parent and t.increment = tp.maxi

关于MySQL - 结合两条记录,每条记录的不同字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16023968/

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