gpt4 book ai didi

mysql - 缩小 GROUP BY 结果

转载 作者:行者123 更新时间:2023-11-29 01:16:18 25 4
gpt4 key购买 nike

我不确定 GROUP BY 是否是实现我所寻找的目标的正确方法。假设你有一张像

UID     ID     VERSION  A       B       C
------------------------------------------------
1 1 3 'a' NULL NULL
2 1 2 NULL 'b' NULL
3 1 1 NULL NULL 'c'
4 2 3 NULL 'dd' NULL
5 2 2 NULL 'd' 'e'
6 2 1 'f' NULL NULL

现在我想通过在 ID 上分组/选择来选择某种缩小的行按 VERSION 对组进行排序( DESC ) 然后只使用第一个匹配 NOT NULL单元格。

结果应该是(未指定VERSION)

ID      VERSION  A       B       C
-----------------------------------------
1 3 'a' 'b' 'c'
2 3 'f' 'dd' 'e'

或使用特定的 VERSION使用像 WHERE version <= 2 这样的东西

ID      VERSION  A       B       C
-----------------------------------------
1 2 NULL 'b' 'c'
2 2 'f' 'd' 'e'

我什至不确定像这样进行版本化是否有意义。我在考虑具有大量内容的单元格,其中只有一些列经常更改,并且在每次更改时复制其他未更改的列将是一个巨大的开销。

最佳答案

除了 GROUP BY,我自己想不出别的。

你为什么不试试这个?

SELECT id, MAX(version) as version,
SUBSTRING_INDEX(GROUP_CONCAT(A ORDER BY version DESC ),',',1) as A,
SUBSTRING_INDEX(GROUP_CONCAT(B ORDER BY version DESC ),',',1) as B,
SUBSTRING_INDEX(GROUP_CONCAT(C ORDER BY version DESC ),',',1) as C
FROM table WHERE version <= 2
GROUP BY id;

所以这个 -

  1. 基本上分别对 As、Bs 和 Cs 的所有值进行分组(按版本降序排列)
  2. 然后获取每个的第一个值(在第一个逗号之前)

只要您不点击 GROUP_CONCAT,这应该可以正常工作长度限制约束

关于mysql - 缩小 GROUP BY 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32768500/

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