SQL - Order By

   
Vista:

Order By

Publicado por Eber (6 intervenciones) el 23/03/2011 21:47:10
Estimados!!!
Existirá la posibilidad de crear una sentencia sql que me ordene los registros de producción desde las 06:00 a 23:00 y luego de 00:00 a 05:00???
Es para agregarsela a un mschart.
O si saben alguna otra manera es bienvenida...

Graciassssssss!!!!!!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Order By

Publicado por Leonardo Josué (877 intervenciones) el 23/03/2011 22:30:27
Hola Eber:

En tu post no mencionas qué manejador de BD estás utilizando, ni tampoco mencionas de qué tipo de dato es tu columna (supongo que sería datetime pero sólo tú lo sabes). El manejo de fechas varia mucho entre los manejadores de BD, te pongo un ejemplo de cómo sería con SQL Server, si utilizas algún otro manejador sería cuestión de que encuentres la sintaxis adecuada:

declare @Tabla Table (hora datetime)
insert into @Tabla values (convert(datetime, '00:00', 108))
insert into @Tabla values (convert(datetime, '23:59', 108))
insert into @Tabla values (convert(datetime, '04:00', 108))
insert into @Tabla values (convert(datetime, '02:00', 108))
insert into @Tabla values (convert(datetime, '08:00', 108))
insert into @Tabla values (convert(datetime, '12:00', 108))
insert into @Tabla values (convert(datetime, '10:00', 108))
insert into @Tabla values (convert(datetime, '14:00', 108))
insert into @Tabla values (convert(datetime, '06:00', 108))
insert into @Tabla values (convert(datetime, '18:00', 108))
insert into @Tabla values (convert(datetime, '16:00', 108))
insert into @Tabla values (convert(datetime, '20:00', 108))
insert into @Tabla values (convert(datetime, '22:00', 108))

--Sin ordenamiento
select convert(varchar, hora, 108) hora from

-- Con el ordenamiento común
select convert(varchar, hora, 108) hora from @Tabla order by hora

--Con el ordenamiento especial
select convert(varchar, hora, 108) hora from @Tabla
order by
case when (hora >= convert(datetime, '06:00', 108) and hora <= convert(datetime, '23:59', 108)) then 1 else 2 end,
hora.

El resultado de estos select quedaría así

Sin ordenar|Ordenado común|Ordenado especial
----------------------------------------------------------------------
00:00:00|00:00:00|06:00:00
23:59:00|02:00:00|08:00:00
04:00:00|04:00:00|10:00:00
02:00:00|06:00:00|12:00:00
08:00:00|08:00:00|14:00:00
12:00:00|10:00:00|16:00:00
10:00:00|12:00:00|18:00:00
14:00:00|14:00:00|20:00:00
06:00:00|16:00:00|22:00:00
18:00:00|18:00:00|23:59:00
16:00:00|20:00:00|00:00:00
20:00:00|22:00:00|02:00:00
22:00:00|23:59:00|04:00:00

Como vez en el ordenamiento especial utilizo un case when y asigno una salida 1 para los elementos que quiero que aparezcan primero y un 2 para los que deben aparecer al final. Dale un vistazo y si continuas con problemas danos un poco más de información para no tener que estar adivinando.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Order By

Publicado por Eber (6 intervenciones) el 24/03/2011 12:41:33
Estimado!!!
Muchisimas Gracias por responder a mi duda.
La base de datos es Access y estoy haciendo la conexiòn a la base de datos con un objeto recordset desde VB y le asigno una sentencia SQL. El dato es de tipo Fecha/hora. La idea es ordenar (No se si con un order by "personalizado") los datos, de 6 de la mañana a 5 de la mañana del siguiente dia.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Order By

Publicado por Leonardo Josué (877 intervenciones) el 24/03/2011 20:40:55
Hola de nuevo Eber:

Lamentablemente no tengo mucha experiencia con Access, sin embargo creo que el problema no está en el ordenar, sino en filtrar la información. Te dejo el ejemplo nuevamente de cómo sería en SQL Server, sería cuestión de que investigaras cómo hacerlo en Access... aunque mejor te recomendaría que cambiaras consideraras elegir otro motor, ya que Access no se puede considerar un DMBS, hay versiones libres (mySQL, SQL Server Express, Firebird, Postgress etc) que podrías elegir, pero bueno, esa es otra historia:

declare @Tabla Table (fecha datetime)
insert into @Tabla values ('20110324 05:00')
insert into @Tabla values ('20110325 05:59')
insert into @Tabla values ('20110324 06:00')
insert into @Tabla values ('20110324 13:00')
insert into @Tabla values ('20110324 17:00')
insert into @Tabla values ('20110324 09:00')
insert into @Tabla values ('20110325 01:00')
insert into @Tabla values ('20110325 06:00')
insert into @Tabla values ('20110324 23:59')

select * from @Tabla
where
(
--Para comparar la fecha sin importar la hora
convert(varchar, fecha, 103) = convert(varchar, getdate(), 103) and
--Para comparar sólo la hora (solo muestra los registros posteriores a las 06:00
convert(datetime, convert(varchar, fecha, 108), 108) >= convert(datetime, '06:00', 108)
)
or
(
--Para comparar por los registros del siguiente día
convert(varchar, fecha, 103) = convert(varchar, getdate() + 1, 103) and
--Para comparar sólo la hora (solo muestra los registros anteriores a las 05:59
convert(datetime, convert(varchar, fecha, 108), 108) <= convert(datetime, '05:59', 108)
)
order by fecha

El resultado de esta consulta sería:
fecha
------------------------------------
2011-03-24 06:00:00.000
2011-03-24 09:00:00.000
2011-03-24 13:00:00.000
2011-03-24 17:00:00.000
2011-03-24 23:59:00.000
2011-03-25 01:00:00.000
2011-03-25 05:59:00.000

La idea básicamente es traer todos los registros con fecha igual a la fecha actual (getdate()) pero que tengan una hora mayor o igual a las 06:00 + los registros de la fecha de mañana (getdate() +1) pero con fecha menor o igual a las 05:59. Para ordenar los registros lo haces de manera normal.

Dale un vistazo y espero que te sirva, o esperemos que alguien con más conocimientos en Access pueda ayudarte.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Order By

Publicado por Eber (6 intervenciones) el 28/03/2011 15:08:34
Excelente!!!...
Gracias Leonardo por tu comentario...me sirvió de guía
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar