gpt4 book ai didi

MySQL多列最大顺序运行

转载 作者:行者123 更新时间:2023-11-30 23:25:59 27 4
gpt4 key购买 nike

几天来,我一直在用头撞墙,试图为以下问题(MySQL 的新问题)编写查询。

我有一个表A,里面有以下数据

id, r1, r2, r3, r4, r5, r6, r7, r8, r9, max
1, 1, 2, 3, 6, 7, 8, 9, 0
2, 1, 3, 4, 5, 6, 7, 8, 0
3, 2, 4, 5, 7, 9, 11, 12, 0

我需要将最大字段设置为行中的最大序列。例如,行 ID 1 的最大序列为 4 (6,7,8,9),因此最大字段将显示 4。数字始终在行中从最小到最大(从左到右)列出。

我怀疑它会是这样的;

SET @r:=0
SET @s:=0

IF(r1 + 1 = r2, IF(@r > @s, @s:=@r, @r:= @r + 1),
IF(r2 + 1 = r3, IF(@r > @s, @s:=@r, @r:= @r + 1),
IF(r3 + 1 = r4, IF(@r > @s, @s:=@r, @r:= @r + 1),
IF(r4 + 1 = r5, IF(@r > @s, @s:=@r, @r:= @r + 1),`

等等...但它似乎不起作用,因为增量仅适用于每行??

FOR i <= count(column)
IF count > sequence
THEN sequence = count
ELSE count ++
NEXT i

如有任何帮助,我们将不胜感激。谢谢。

最佳答案

您可能完全可以在 MySQL 中执行此操作,但我认为这会相当困惑。

如果我是你,我会在客户端上执行此操作。这应该作为 Perl 实现工作:

use DBI;
my $dbh = DBI->connect("dbi:mysql", "user", "password");
my $sth = $dbh->prepare("SELECT * FROM mytable");
$sth->execute();
while (my $row = $sth->fetchrow_hashref()) {
my $id = $row->{id};
my @r;
push @r, $row->{r1}, $row->{r2}, $row->{r3},
$row->{r4}, $row->{r5}, $row->{r6},
$row->{r7}, $row->{r8}, $row->{r9};
my $max = 1; # max run
my $t = 1; # local max run
for (my $i = 1; $i < 9; $i++) {
if ($r[$i] == $r[$i-1]+1) {
$t++;
} else {
$t = 1;
}
if ($t > $max) {
$max = $t;
}
}
$dbh->do(qq{ UPDATE mytable SET max = ? WHERE id = ?}, undef,
$max, $id);
}
$sth->finish();
$dbh->disconnect();

关于MySQL多列最大顺序运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13328931/

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