Use o MySQL para selecionar o próximo registro após um valor correspondente sem um RowID sequencial

1

Como posso selecionar todas as linhas ao lado da linha correspondente à condição? Mas, considerando que não há um RowID secular como o campo de ID

Esta é a estrutura da tabela com 10 linhas, mas o número de linhas aumentará no futuro.

Texto sem formatação:

ID      Date        N1
1     DateTime    9  
2     DateTime    2
3     DateTime    5
4     DateTime    9
5     DateTime    3
6     DateTime    6
7     DateTime    7
8     DateTime    9
20    DateTime    3 //Sequence broken
21    DateTime    9

Nota: A string "DateTime" é apenas simbólica, seria qualquer DateTime.

Estou tentando saber o primeiro número N1 após o número: 9

Eu tentei várias maneiras, mas o resultado não é o que eu preciso.

O resultado esperado é:

ID      Date        N1
2     DateTime      2
5     DateTime      3
20    DateTime      3

Uma maneira simples de conseguir isso foi postada em esta pergunta , mas apenas se o RowID manter a sequência.

    
por Martini002 11.04.2017 / 03:07

1 resposta

0

Você pode criar duas Tabelas temporárias com uma usando a variável @row_num criando um índice por número de linha e incrementará cada um por um independentemente dos valores RowID . Em seguida, a partir dessa tabela temporária, você selecionará o row_num+1 a partir do qual o valor N1 será igual a 9 . A partir daí, você seleciona as colunas id e N1 explicitamente, em que row_num corresponde aos resultados desejados.

Consulta SQL

SET @row_num:=0;
DROP TABLE IF EXISTS t1;
CREATE TEMPORARY TABLE t1 (SELECT @row_num:=@row_num+1 AS row_num, id, N1 FROM numbers);

DROP TABLE IF EXISTS t2;
CREATE TEMPORARY TABLE t2 (Select row_num+1 as row_num FROM t1 WHERE N1 = 9);

SELECT id, N1 FROM t1
WHERE row_num IN (Select * From t2);

Confirmação

Select * From Numbers (RowID equaling 5 is missing here)

enter image description here

Above SQL Query

enter image description here

Mais recursos

por 11.04.2017 / 04:06