none
Ordenar datos por un identificador similar RRS feed

  • Pregunta

  • Hola, tengo una duda sobre como podria buscar un identificador similar a otro.

    Origen  Destino  Identificador_ruta  Location_lat  Location_lon
    338       286        338_286           19.399201    -99.179943
    375       338        375_338           19.384249    -99.163273
    157       338        157_338           19.384249    -99.163273
    290       338        290_338           19.384249    -99.163273
    207       338        207_338           19.384249    -99.163273
    167       338        167_338           19.384249    -99.163273

    Tengo mas de 95 mil registros así, el identificador_ruta es la fusión de Origen Y Destino y quiero ordenar mis datos de manera que terminen de la siguiente forma:

                           
    Origen  Destino dentificador_ruta  Location_lat  Location_lon
    338       286        338_286        19.399201    -99.179943
    286       338        286_338        19.384249    -99.163273

     puede que el primer registro con identificador 338_286 este en la fila numero 1 y el identificador 286_338 este en la fila mil que es en teoria el mismo identificador solo que comienza de atrás hacia adelante.

    que termine el "mismo" identificador de ruta por así decirlo, aun que el identificador solamente esta al revés, ¿hay alguna manera de poder ordenarlos asi?  

    :)

    miércoles, 23 de octubre de 2019 16:42

Respuestas

  • Augusto, creo que el código #2 que borré era correcto.

    -- código #2
    with 
    Ida as (
    SELECT *, Origen as L1, Destino as L2, 1 as Orden
      from tabla
      where Origen < Destino
    ),
    Volta as (
    SELECT *, Destino as L1, Origen as L2, 2 as Orden
      from tabla
      where Origen > Destino
    ),
    Par as (
    SELECT Origen, Destino, Identificador_ruta, Location_lat, Location_lon, L1, L2, Orden
      from Ida
    union all
    SELECT Origen, Destino, Identificador_ruta, Location_lat, Location_lon, L1, L2, Orden
      from Volta
    )
    SELECT Origen, Destino, Identificador_ruta, Location_lat, Location_lon
      from Par
      order by L1, L2, Orden;
     

    Pero me parece que la solución propuesta es compleja.  Probablemente hay una manera más simple de resolver el problema.


    José Diz     Belo Horizonte, MG - Brasil     [query performance tuning: Porto SQL]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    • Editado José Diz miércoles, 23 de octubre de 2019 17:33
    • Marcado como respuesta Augusto Mejia miércoles, 23 de octubre de 2019 17:40
    miércoles, 23 de octubre de 2019 17:31

Todas las respuestas

  • Augusto, creo que el código #2 que borré era correcto.

    -- código #2
    with 
    Ida as (
    SELECT *, Origen as L1, Destino as L2, 1 as Orden
      from tabla
      where Origen < Destino
    ),
    Volta as (
    SELECT *, Destino as L1, Origen as L2, 2 as Orden
      from tabla
      where Origen > Destino
    ),
    Par as (
    SELECT Origen, Destino, Identificador_ruta, Location_lat, Location_lon, L1, L2, Orden
      from Ida
    union all
    SELECT Origen, Destino, Identificador_ruta, Location_lat, Location_lon, L1, L2, Orden
      from Volta
    )
    SELECT Origen, Destino, Identificador_ruta, Location_lat, Location_lon
      from Par
      order by L1, L2, Orden;
     

    Pero me parece que la solución propuesta es compleja.  Probablemente hay una manera más simple de resolver el problema.


    José Diz     Belo Horizonte, MG - Brasil     [query performance tuning: Porto SQL]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    • Editado José Diz miércoles, 23 de octubre de 2019 17:33
    • Marcado como respuesta Augusto Mejia miércoles, 23 de octubre de 2019 17:40
    miércoles, 23 de octubre de 2019 17:31
  • Creo que encontré una solución simple:

    -- código #3 v2
    SELECT Origen, Destino, Identificador_ruta, Location_lat, Location_lon
    from tabla   order by case when Origen < Destino then Origen else Destino end, -- L1
           case when Origen > Destino then Origen else Destino end, -- L2
           case when Origen < Destino then 1 else 2 end; -- Orden


    José Diz     Belo Horizonte, MG - Brasil     [query performance tuning: Porto SQL]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    • Propuesto como respuesta Javi Fernández F miércoles, 23 de octubre de 2019 17:41
    • Editado José Diz jueves, 24 de octubre de 2019 12:34
    miércoles, 23 de octubre de 2019 17:36
  • Muchas gracias por tu respuesta, resolvió mi problema. :)  



    :)

    miércoles, 23 de octubre de 2019 17:53