gpt4 book ai didi

sql - 是否有一个查询可以跨多个组更新 "sequence number"?

转载 作者:可可西里 更新时间:2023-11-01 07:31:48 24 4
gpt4 key购买 nike

给定如下表,是否有一种单查询方法可以从中更新表:

| id | type_id | created_at | sequence |
|----|---------|------------|----------|
| 1 | 1 | 2010-04-26 | NULL |
| 2 | 1 | 2010-04-27 | NULL |
| 3 | 2 | 2010-04-28 | NULL |
| 4 | 3 | 2010-04-28 | NULL |

为此(注意 created_at 用于排序,sequencetype_id“分组”):

| id | type_id | created_at | sequence |
|----|---------|------------|----------|
| 1 | 1 | 2010-04-26 | 1 |
| 2 | 1 | 2010-04-27 | 2 |
| 3 | 2 | 2010-04-28 | 1 |
| 4 | 3 | 2010-04-28 | 1 |

我之前看过一些使用 @ 变量的代码,我认为它可能有效:

SET @seq = 0;
UPDATE `log` SET `sequence` = @seq := @seq + 1
ORDER BY `created_at`;

但这显然不会将每个 type_id 的序列重置为 1。

如果没有单一查询方式来执行此操作,那么最有效的方式是什么?

此表中的数据可能会被删除,因此我计划在用户完成编辑后运行存储过程以对表重新排序。

最佳答案

您可以使用另一个变量存储先前的 type_id (@type_id)。查询按 type_id 排序,因此每当 type_id 发生变化时,sequence 必须再次重置为 1。

Set @seq = 0;
Set @type_id = -1;

Update `log`
Set `sequence` = If(@type_id=(@type_id:=`type_id`), (@seq:=@seq+1), (@seq:=1))
Order By `type_id`, `created_at`;

关于sql - 是否有一个查询可以跨多个组更新 "sequence number"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2743689/

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