none
Insertar consulta dentro de una tabla - No puedo ordenar por fecha RRS feed

  • Pregunta

  • Hola, buenos días

    Tengo una base de datos donde al realizar una consulta a una tabla puedo realizar el filtro por fecha de manera ordenada, pero si agrego la instrucción de insertar en otra tabla realiza el filtro pero almacena los registros de manera desordenada. Que puede estar pasando? 

    Nota: En otra base de datos también me muestra los registros desordenados desde la consulta 

    Agradezco su colaboración, es un poco urgente.

    Sintaxis que estoy usando: 

    Insert into DatosFiltradosFecha Select * From FloatTable 
    Where DateAndTime>='2018-06-26 12:23:43.0000000' and DateAndTime<='2018-06-26 13:33:43.0000000' 
    Order By DateAndTime ASC 


    jueves, 23 de agosto de 2018 18:58

Respuestas

  • Hola.

    Una tabla no tiene el concepto de primer y ultimo registro, entonces no esta "desordenada", el "orden" que tu indicas hace referencia a la PK que tenga establecida la tabla, entonces:

    SI tu tabla tiene una PK por ID cuando haces un Select * from Tabla veras un "orden" por dicho ID, si necesitas ordenar por un campo distinto a la PK debes indicarle el Order By respectivo

    Saludos.

    Cristian


    DBA SQL Server Santiago/Chile


    • Editado CMAPM jueves, 23 de agosto de 2018 19:09
    • Marcado como respuesta Pablo RubioModerator viernes, 24 de agosto de 2018 18:28
    jueves, 23 de agosto de 2018 19:08
  • Hola Felipe123454321:

    Puedes probar....

    CREATE TABLE floatTable
    (id          INT IDENTITY(1, 1),
     DateAndTime DATETIME2
    );
    GO
    INSERT INTO floatTable(DateAndTime)
    VALUES
     ('20180626 12:23:43.0000000'),
     ('20180626 12:23:43.0000300'), 
     ('20180626 12:23:43.0020000'), 
     ('20180626 12:23:43.1000000'), 
     ('20180626 12:23:44.0000000'), 
     ('20180626 12:24:43.0000000'),
     ('20180626 12:23:13.0000000'),
     ('20180626 12:23:23.0000000'), 
     ('20180626 12:23:03.0000300'), 
     ('20180626 12:24:43.1000000'), 
     ('20180626 12:32:44.0000000'), 
     ('20180626 12:22:43.0000000'), 
     ('20180626 12:29:13.0000000'), 
     ('20180626 12:12:23.0000000'), 
     ('20180626 12:23:03.0000300');
    GO
    CREATE TABLE DatosFiltrados
    (id    INT,
     fecha DATETIME2
    );
    GO
    INSERT INTO DatosFiltrados
           SELECT *
           FROM floatTable
           WHERE DateAndTime >= '2018-06-26 12:23:43.0000000'
                 AND DateAndTime <= '2018-06-26 13:33:43.0000000'
           ORDER BY CONVERT(DATETIME2, DateAndTime) ASC;
    SELECT *
    FROM DatosFiltrados;

    Si mal no recuerdo, para hacer el Order by, realiza una conversión implícita.

    Ya comentas.

    Un saludo

    jueves, 23 de agosto de 2018 19:17

Todas las respuestas

  • Hola.

    Una tabla no tiene el concepto de primer y ultimo registro, entonces no esta "desordenada", el "orden" que tu indicas hace referencia a la PK que tenga establecida la tabla, entonces:

    SI tu tabla tiene una PK por ID cuando haces un Select * from Tabla veras un "orden" por dicho ID, si necesitas ordenar por un campo distinto a la PK debes indicarle el Order By respectivo

    Saludos.

    Cristian


    DBA SQL Server Santiago/Chile


    • Editado CMAPM jueves, 23 de agosto de 2018 19:09
    • Marcado como respuesta Pablo RubioModerator viernes, 24 de agosto de 2018 18:28
    jueves, 23 de agosto de 2018 19:08
  • Hola Felipe123454321:

    Puedes probar....

    CREATE TABLE floatTable
    (id          INT IDENTITY(1, 1),
     DateAndTime DATETIME2
    );
    GO
    INSERT INTO floatTable(DateAndTime)
    VALUES
     ('20180626 12:23:43.0000000'),
     ('20180626 12:23:43.0000300'), 
     ('20180626 12:23:43.0020000'), 
     ('20180626 12:23:43.1000000'), 
     ('20180626 12:23:44.0000000'), 
     ('20180626 12:24:43.0000000'),
     ('20180626 12:23:13.0000000'),
     ('20180626 12:23:23.0000000'), 
     ('20180626 12:23:03.0000300'), 
     ('20180626 12:24:43.1000000'), 
     ('20180626 12:32:44.0000000'), 
     ('20180626 12:22:43.0000000'), 
     ('20180626 12:29:13.0000000'), 
     ('20180626 12:12:23.0000000'), 
     ('20180626 12:23:03.0000300');
    GO
    CREATE TABLE DatosFiltrados
    (id    INT,
     fecha DATETIME2
    );
    GO
    INSERT INTO DatosFiltrados
           SELECT *
           FROM floatTable
           WHERE DateAndTime >= '2018-06-26 12:23:43.0000000'
                 AND DateAndTime <= '2018-06-26 13:33:43.0000000'
           ORDER BY CONVERT(DATETIME2, DateAndTime) ASC;
    SELECT *
    FROM DatosFiltrados;

    Si mal no recuerdo, para hacer el Order by, realiza una conversión implícita.

    Ya comentas.

    Un saludo

    jueves, 23 de agosto de 2018 19:17
  • Hola Felipe, no has utilizado el DATEPART para ordenar tus fechas
    jueves, 23 de agosto de 2018 22:54