Especificar manualmente el valor inicial para el número de fila()
Quiero definir el inicio de ROW_NUMBER()
como 3258170
en lugar de 1
.
Estoy usando la siguiente consulta SQL
SELECT ROW_NUMBER() over(order by (select 3258170)) as 'idd'.
Sin embargo, la consulta anterior no funciona. Cuando digo que no funciona me refiero a su ejecución, pero no a partir de 3258170
. ¿Alguien puede ayudarme?
La razón por la que quiero especificar el número de fila es que estoy insertando filas de una tabla a otra. En la primera Tabla el número de fila del último registro es 3258169
y cuando inserto nuevos registros quiero que tengan la fila número de 3258170
.
3 answers
Simplemente agregue el valor al resultado de row_number()
:
select 3258170 - 1 + row_number() over (order by (select NULL)) as idd
La cláusula order by
de row_number()
especifica qué columna se utiliza para el orden por. Al especificar una constante allí, simplemente estás diciendo "todo tiene el mismo valor para fines de pedido". No tiene nada, nada en absoluto que ver con el primer valor elegido.
Para evitar confusiones, reemplacé el valor constante por NULL. En SQL Server, he observado que esto asigna un número secuencial sin realmente ordenar las filas an una ventaja de rendimiento observada, pero no una que he visto documentada, así que no podemos depender de ella.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-04 20:15:15
Siento que esto es más fácil
ROW_NUMBER() OVER(ORDER BY Field) - 1 AS FieldAlias (To start from 0)
ROW_NUMBER() OVER(ORDER BY Field) + 3258169 AS FieldAlias (To start from 3258170)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-19 09:28:37
A veces....
El ROW_NUMBER() puede no ser la mejor solución, especialmente cuando podría haber registros duplicados en el conjunto de datos subyacente (para consultas de combinación, etc.).). Esto puede resultar en más filas devueltas de lo esperado. Puede considerar la creación de una SECUENCIA que en algunos casos puede considerarse una solución más limpia. es decir:
CREATE SEQUENCE myRowNumberId
START WITH 1
INCREMENT BY 1
GO
SELECT NEXT VALUE FOR myRowNumberId AS 'idd' -- your query
GO
DROP SEQUENCE myRowNumberId; -- just to clean-up after ourselves
GO
La desventaja es que las secuencias pueden ser difíciles de usar en consultas complejas con DISTINTAS funciones de VENTANA, etc. Ver el completo documentación de la secuencia aquí .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-27 21:07:16