Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-01-2010
Avatar de lina maria
lina maria lina maria is offline
Miembro
 
Registrado: abr 2008
Posts: 53
Poder: 17
lina maria Va por buen camino
Order by anidados

Hola compañeros, yo de nuevo con otra de mis dudas, la cosa va asi tengo una tabla con dos campos TIMESTAMP, uno de ellos (fecha1) es not null, mientras que el otro (fecha2) si puede estar en null, mi problema es el siguiente, necesito ordenar todos los datos de la siguiente forma, en primer lugar deben estar los datos que su fecha2 sea null, estos datos deben estar ordenados de acuerdo a la fecha almacenada en fecha1, despues de estos campos tiene que aparecer los datos cuya fecha2 sea diferente de null igualmente ordenados por fecha1, se me ocurrio algo asi como un order by anidado (por eso el titulo del mensaje) pero no he dado como. Agradesco cualquier ayuda o guia que me puedan brindar muchas gracias y estamos hablando, besos y abrazos.

P.D. utilizo delphi 7 y postgreSQL 8.3, los resultados los muestro en un dbgrid
Responder Con Cita
  #2  
Antiguo 04-01-2010
Avatar de afunez2007
afunez2007 afunez2007 is offline
Miembro
 
Registrado: oct 2007
Ubicación: La Ceiba, Honduras
Posts: 170
Poder: 17
afunez2007 Va por buen camino
Lightbulb

Hola

No se si en postgre sql funcione pero en mssql, es asi:
Código SQL [-]
SELECT *FROM TUTABLA
ORDER BY FECHA2 ASC, FECHA1 ASC

Espero te sirva

Saludos
__________________
Si robas, roba un beso, si mientes que sea por amor y si engañas que sea a la muerte!!
Responder Con Cita
  #3  
Antiguo 04-01-2010
Avatar de lina maria
lina maria lina maria is offline
Miembro
 
Registrado: abr 2008
Posts: 53
Poder: 17
lina maria Va por buen camino
Hola, muchas gracias por tu respuesta, te cuento que esa solucion ya la habia contemplado, pero al ejecutarla vi un problema, con esta solucion el me ordena primero por el primer campo valga la redundancia osea en este caso fecha1 y despues para cada uno de ellos me ordena fecha2 osea me explico mejor con un ejemplo, tengo 8 registros cada uno de ellos con diferente fecha2 del 1 al 10 y la mitad de ellos con fecha1 15 y la otra mitad con fecha1 20, entonces esa instruccion primero me "agrupa" los de fecha1 15 ordenados por la fecha2 y despues los otros 5 ordenados por la fecha dos osea, a eso le añado otros dos campos con fecha1 vacia, esta instruccion me los ordenaria asi

1 --
3 --
5 15
7 15
9 15
10 15
2 20
4 20
6 20
8 20

Pero lo que yo necesito es que me los ordene asi
1 --
3 --
2 20
4 20
5 15
6 20
7 15
8 20
9 15
10 15

La primera fecha solo tengo en cuenta dos escenarios que sea null y que sea diferente de null, el resto de la ordenacion la hago por la segunda fecha.

No se si logre explicarme bien, es un poco enrredado pero espero que me hayan entendido.
Muchas gracias por tu colaboracion y por tu tiempo y espero que me puedas ayudar con este nuevo escenario.
Muchas gracias a todos ojala puedan ayudarme.
Besos y abrazos
Responder Con Cita
  #4  
Antiguo 04-01-2010
Avatar de afunez2007
afunez2007 afunez2007 is offline
Miembro
 
Registrado: oct 2007
Ubicación: La Ceiba, Honduras
Posts: 170
Poder: 17
afunez2007 Va por buen camino
Lightbulb

Me podrias inidicar cual es la estructura de la tabla, que hay primero?, hay algun autonumerado, indices, etc.
Los numeros enteros que ilustras en tu mensaje anterior corresponden a fechas dentro de un mismo mes??

Aun es confuso asi como lo planteas, los campos fecha1 y fecha2, son de tipo datetime?? o se guardan fecha y hora?

Saludos
__________________
Si robas, roba un beso, si mientes que sea por amor y si engañas que sea a la muerte!!
Responder Con Cita
  #5  
Antiguo 04-01-2010
Avatar de lina maria
lina maria lina maria is offline
Miembro
 
Registrado: abr 2008
Posts: 53
Poder: 17
lina maria Va por buen camino
Código SQL [-]
CREATE TABLE "X" 
  "i_cod_1" NUMERIC NOT NULL, 
  "i_cod_2" NUMERIC NOT NULL, 
  "FECHA2" TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, 
  "i_cod_3" NUMERIC, 
  "i_cod_4" NUMERIC, 
  "FECHA1" TIMESTAMP(0) WITHOUT TIME ZONE

esa es la estructura de mi tabla, las dos fechas son TIMESTAMP y si esos numeros que puse son fechas dentro de un mismo mes, la unica forma que he encontrado hasta ahora es haces dos consultas que serian mas o menos asi

Código SQL [-]
select * from x 
where fecha1 IS NULL
  ORDER BY fecha2 DESC';
Código SQL [-]
select * from x 
where fecha1 IS NOT NULL
 ORDER BY fecha2 DESC';

La suma de lo que hacen esas dos consultas es lo que necesito, pero en una sola consulta, no he podido dar como.
De nuevo mil gracias por tu ayuda y tiempo invertido en mi problema, te estoy muy agradecida y ojala puedas seguir ayudandome .
Chao besos y abrazos
Responder Con Cita
  #6  
Antiguo 04-01-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Si primero buscas todos los fecha1 nulos, ordenados por fecha2:

Código:
select * from x 
where fecha1 IS NULL
ORDER BY fecha2 DESC;
Y luego buscas todos los fecha1 no nulos, ordenados por fecha2:

Código:
select * from x 
where fecha1 IS NOT NULL
ORDER BY fecha2 DESC;
Entonces, lo que estás buscando es todos los fecha1 (sean nulos o no) ordenados por fecha2.

Pero, según veo en la tabla, fecha1 es 'not null', por lo tanto... no puede haber nulos.

Seguramente me he confundido, ¿puedes aclararlo?


edito: fecha2 es not null, es que lo que he escrito antes es lo que has escrito tú en el primer post.... ya estoy mareado
Responder Con Cita
  #7  
Antiguo 04-01-2010
Avatar de lina maria
lina maria lina maria is offline
Miembro
 
Registrado: abr 2008
Posts: 53
Poder: 17
lina maria Va por buen camino
Hola sisisi, que pena contigo la verdad yo tambien estoy bastante mareada con este asunto , en mitad del foro cambie los nombres, pero bueno el que puede ser null es fecha1, tal como esta en la estructura de la tabla y en los querys, y fecha2 es not null, entonces si tienes razon yo busco todos los fecha1 sean o no nulos ordenados por fecha2 PERO primero me debe ordenar los que son nulos y despues los que son no nulos, y es aqui donde tengo el problema que primero obtenga los no nulos y despues el resto.

Muchas gracias por tu atencion y colaboracion y cualquier otra cosa que necesites que aclare aca estare pendiente.

Gracias besos y abrazos
Responder Con Cita
  #8  
Antiguo 04-01-2010
Avatar de afunez2007
afunez2007 afunez2007 is offline
Miembro
 
Registrado: oct 2007
Ubicación: La Ceiba, Honduras
Posts: 170
Poder: 17
afunez2007 Va por buen camino
Lightbulb

Prueba con esto:
Código SQL [-]
SELECT     i_cod_1, i_cod_2, FECHA2, i_cod_3, i_cod_4, FECHA1
FROM         X
WHERE     (FECHA1 IS NULL)
UNION ALL
SELECT     i_cod_1, i_cod_2, FECHA2, i_cod_3, i_cod_4, FECHA1
FROM         TUTABLA AS X_1
WHERE     (FECHA1 IS NOT NULL)

Esto funciona por lo menos en sql server, esto es lo que resulta:

NULL NULL 01/01/2009 12:00:00 a.m. NULL NULL NULL
NULL NULL 03/01/2009 12:00:00 a.m. NULL NULL NULL
NULL NULL 02/01/2009 12:00:00 a.m. NULL NULL 20/01/2009 12:00:00 a.m.
NULL NULL 04/01/2009 12:00:00 a.m. NULL NULL 20/01/2009 12:00:00 a.m.
NULL NULL 05/01/2009 12:00:00 a.m. NULL NULL 15/01/2009 12:00:00 a.m.
NULL NULL 06/01/2009 12:00:00 a.m. NULL NULL 20/01/2009 12:00:00 a.m.
NULL NULL 07/01/2009 12:00:00 a.m. NULL NULL 15/01/2009 12:00:00 a.m.
NULL NULL 08/01/2009 12:00:00 a.m. NULL NULL 20/01/2009 12:00:00 a.m.
NULL NULL 09/01/2009 12:00:00 a.m. NULL NULL 15/01/2009 12:00:00 a.m.
NULL NULL 10/01/2009 12:00:00 a.m. NULL NULL 15/01/2009 12:00:00 a.m.

Saludos
__________________
Si robas, roba un beso, si mientes que sea por amor y si engañas que sea a la muerte!!
Responder Con Cita
  #9  
Antiguo 04-01-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Seguramente puedas hacerlo con "union", algo parecido a esto:

Código:
select a.*
from tabla a
where a.fecha1 is null
union 
select b.*
from tabla b
where b.fecha1 is not null
order by 1  <--  el número de campo (creo que no acepta nombres en este caso)
edito: se me adelantó afunez2007
Responder Con Cita
  #10  
Antiguo 05-01-2010
Avatar de lina maria
lina maria lina maria is offline
Miembro
 
Registrado: abr 2008
Posts: 53
Poder: 17
lina maria Va por buen camino
Hola, quiero empezar agradeciendoles a los por la ayuda y el tiempo invertido a la solucion de mi problema, les cuento que casi es la solucion, la probe las primeras dos veces y funciono a la perfeccion, pero al modificar unos datos, unas fechas me lo ordena asi

4/1/2010 00:00:00 Null
3/1/2010 00:00:00 Null
2/1/2010 00:00:00 3/1/2010 00:00:00
2/1/2010 00:00:00 Null
1/1/2010 00:00:00 4/1/2010 00:00:00
31/12/2009 00:00:00 31/12/2009 00:00:00

De todos modos ya estoy mas cerca de la solucion gracias a ustedes, voy a segir trabajandole y cualquier otra ayuda sera muy bien recibida.
Muy agradecida por toda la ayuda, besos y abrazos.
Responder Con Cita
  #11  
Antiguo 07-01-2010
Avatar de lina maria
lina maria lina maria is offline
Miembro
 
Registrado: abr 2008
Posts: 53
Poder: 17
lina maria Va por buen camino
Hola a todos, al fin ya pude solucionar mi problema, pongo la solucion por si a alguno le puede interesar, encontre dos soluciones la primera es asi
Código SQL [-]
select fecha1, fecha2
from tablaX
order by
(case fecha1 is null then fecha1 else
fecha2 end) desc, fecha2 DESC

la segunda es asi
Código SQL [-]
select fecha1, fecha2
case when fecha1 is null then 0 else 1 end as ordem
from tablaX
  ORDER BY
   ordem, fecha2 DESC

Muchas gracias por su colaboracion y el tiempo invertido a la solucion de mi problema.

Muchas gracias, chao besos y abrazos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
ayuda con dos for anidados Nelly Varios 4 03-06-2006 21:37:22
Query anidados erasmorc SQL 3 13-12-2005 23:17:36
Clientdatasets anidados con ADO Johnny Q Conexión con bases de datos 4 03-11-2005 02:53:25
Filtros anidados.... Phacko Conexión con bases de datos 2 19-03-2005 19:41:31
Select anidados Ignacio SQL 5 23-02-2004 16:33:30


La franja horaria es GMT +2. Ahora son las 21:06:09.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi