CONSULTA SIMPLE Ayuda!!!

11/05/2007 - 15:40 por Diego | Informe spam
Tengo una tabla con "n" registros cada uno de los cuales tiene fecha y hora
de creación lo que necesito es obtener el ultimo aviso creado es decir el que
tiene la fecha y hora mayor, vale aclarar que mis dos campos 'fecha_creada' y
'hora_creada' estan declarados como string, no como date en mi base de
datos... Estoy trabajando con SQL SERver EXPress 2005
Ejemplo

Tabla Prueba
COd. fecha_creada hora_creada
1 11/05/2007 07:00:00
2 10/05/2007 07:50:00
3 12/05/2007 07:00:00
4 09/05/2007 07:10:00
5 12/05/2007 07:01:00 (- ESTE REGISTRO SERIA LA RESPUESTA

Aclaro nuevamente que los campos en donde se almacena la fecha y la hora
estan declarados char

Espero su repuesta y gracias de antemano

Saludos
Diego

Preguntas similare

Leer las respuestas

#1 Manuel Vera
11/05/2007 - 16:07 | Informe spam
Hola Diego

Imagino que ya te diste cuenta que el problema que tienes es haber declarado
esos campos como char.
Sin embargo, tienes una solución. Puedes convertir esos campos a tipo fecha
utilizando las funciones CONVERT() y/o CAST() de SQL SERVER.

Ya que esos campos son tipo char puedes manipular sus valores con otras
funciones, como por ejemplo, SUBSTRING() o SUBSTR(), LEFT(), RIGHT, etc...
esto en caso de que no puedas convertir los datos directamente y tengas que
recurrir a cortar y pegar.

Finalmente, deberás utilizar la clausula ORDER BY... algo como:

ORDER BY CONVERT( datetime , <fecha> ) DESC

donde <fecha> sería algo como:

fecha_creada + ' ' + hora_creada

En caso de no funcionar esa conversión directa, entonces aplica las otras
funciones de corte-y-pega.

Se me olvidaba, lo último es colocar en el SELECT lo siguiente:

SELECT TOP 1 .

Para que solo traigas la última fila o la más reciente.

Saludos
MV



"Diego" escribió en el mensaje
news:
Tengo una tabla con "n" registros cada uno de los cuales tiene fecha y
hora
de creación lo que necesito es obtener el ultimo aviso creado es decir el
que
tiene la fecha y hora mayor, vale aclarar que mis dos campos
'fecha_creada' y
'hora_creada' estan declarados como string, no como date en mi base de
datos... Estoy trabajando con SQL SERver EXPress 2005
Ejemplo

Tabla Prueba
COd. fecha_creada hora_creada
1 11/05/2007 07:00:00
2 10/05/2007 07:50:00
3 12/05/2007 07:00:00
4 09/05/2007 07:10:00
5 12/05/2007 07:01:00 (- ESTE REGISTRO SERIA LA
RESPUESTA

Aclaro nuevamente que los campos en donde se almacena la fecha y la hora
estan declarados char

Espero su repuesta y gracias de antemano

Saludos
Diego

Respuesta Responder a este mensaje
#2 Diego
11/05/2007 - 16:29 | Informe spam
Muchas Gracias manuel pero te cuento que no he podido hacerlo

HICE ESTO PERO ME DA ERROR DE CONVERSION

SELECT top 1 [TPQMNUM]
FROM [PMM_AVIS]
ORDER BY CONVERT( datetime , [FCQMDAT]+ ' ' + [HRMZEIT] ) DESC


Sera que me podrias dar una mano con esta consulta como se deberia hacer
donde :
FCQMDAT: es la fecha de creacion
HRMZEIT: es la hora de creacion
TPQMNUM: es el codigo del registro
PMM_AVIS: es la tabla

Muchas Gracias espero tu respuesta

Saludos Diego

"Manuel Vera" wrote:

Hola Diego

Imagino que ya te diste cuenta que el problema que tienes es haber declarado
esos campos como char.
Sin embargo, tienes una solución. Puedes convertir esos campos a tipo fecha
utilizando las funciones CONVERT() y/o CAST() de SQL SERVER.

Ya que esos campos son tipo char puedes manipular sus valores con otras
funciones, como por ejemplo, SUBSTRING() o SUBSTR(), LEFT(), RIGHT, etc...
esto en caso de que no puedas convertir los datos directamente y tengas que
recurrir a cortar y pegar.

Finalmente, deberás utilizar la clausula ORDER BY... algo como:

ORDER BY CONVERT( datetime , <fecha> ) DESC

donde <fecha> sería algo como:

fecha_creada + ' ' + hora_creada

En caso de no funcionar esa conversión directa, entonces aplica las otras
funciones de corte-y-pega.

Se me olvidaba, lo último es colocar en el SELECT lo siguiente:

SELECT TOP 1 .

Para que solo traigas la última fila o la más reciente.

Saludos
MV



"Diego" escribió en el mensaje
news:
> Tengo una tabla con "n" registros cada uno de los cuales tiene fecha y
> hora
> de creación lo que necesito es obtener el ultimo aviso creado es decir el
> que
> tiene la fecha y hora mayor, vale aclarar que mis dos campos
> 'fecha_creada' y
> 'hora_creada' estan declarados como string, no como date en mi base de
> datos... Estoy trabajando con SQL SERver EXPress 2005
> Ejemplo
>
> Tabla Prueba
> COd. fecha_creada hora_creada
> 1 11/05/2007 07:00:00
> 2 10/05/2007 07:50:00
> 3 12/05/2007 07:00:00
> 4 09/05/2007 07:10:00
> 5 12/05/2007 07:01:00 (- ESTE REGISTRO SERIA LA
> RESPUESTA
>
> Aclaro nuevamente que los campos en donde se almacena la fecha y la hora
> estan declarados char
>
> Espero su repuesta y gracias de antemano
>
> Saludos
> Diego
>



Respuesta Responder a este mensaje
#3 Manuel Vera
11/05/2007 - 17:16 | Informe spam
Hola

Prueba "convirtiendo cada campo por separado. Algo como:

ORDER BY CONVERT( datetime , <campo_fecha> ) DESC
, CONVERT( datetime , <campo_hora> ) DESC

Y descarta la concatenación inicial que te habia comentado.

Si tampoco te sirve deberás utilizar las otras funciones para convertir el
char de fecha a este formato: aaaa-mm-dd

Saludos
MV

"Diego" escribió en el mensaje
news:
Muchas Gracias manuel pero te cuento que no he podido hacerlo

HICE ESTO PERO ME DA ERROR DE CONVERSION

SELECT top 1 [TPQMNUM]
FROM [PMM_AVIS]
ORDER BY CONVERT( datetime , [FCQMDAT]+ ' ' + [HRMZEIT] ) DESC


Sera que me podrias dar una mano con esta consulta como se deberia hacer
donde :
FCQMDAT: es la fecha de creacion
HRMZEIT: es la hora de creacion
TPQMNUM: es el codigo del registro
PMM_AVIS: es la tabla

Muchas Gracias espero tu respuesta

Saludos Diego

"Manuel Vera" wrote:

Hola Diego

Imagino que ya te diste cuenta que el problema que tienes es haber
declarado
esos campos como char.
Sin embargo, tienes una solución. Puedes convertir esos campos a tipo
fecha
utilizando las funciones CONVERT() y/o CAST() de SQL SERVER.

Ya que esos campos son tipo char puedes manipular sus valores con otras
funciones, como por ejemplo, SUBSTRING() o SUBSTR(), LEFT(), RIGHT,
etc...
esto en caso de que no puedas convertir los datos directamente y tengas
que
recurrir a cortar y pegar.

Finalmente, deberás utilizar la clausula ORDER BY... algo como:

ORDER BY CONVERT( datetime , <fecha> ) DESC

donde <fecha> sería algo como:

fecha_creada + ' ' + hora_creada

En caso de no funcionar esa conversión directa, entonces aplica las otras
funciones de corte-y-pega.

Se me olvidaba, lo último es colocar en el SELECT lo siguiente:

SELECT TOP 1 .

Para que solo traigas la última fila o la más reciente.

Saludos
MV



"Diego" escribió en el mensaje
news:
> Tengo una tabla con "n" registros cada uno de los cuales tiene fecha y
> hora
> de creación lo que necesito es obtener el ultimo aviso creado es decir
> el
> que
> tiene la fecha y hora mayor, vale aclarar que mis dos campos
> 'fecha_creada' y
> 'hora_creada' estan declarados como string, no como date en mi base de
> datos... Estoy trabajando con SQL SERver EXPress 2005
> Ejemplo
>
> Tabla Prueba
> COd. fecha_creada hora_creada
> 1 11/05/2007 07:00:00
> 2 10/05/2007 07:50:00
> 3 12/05/2007 07:00:00
> 4 09/05/2007 07:10:00
> 5 12/05/2007 07:01:00 (- ESTE REGISTRO SERIA LA
> RESPUESTA
>
> Aclaro nuevamente que los campos en donde se almacena la fecha y la
> hora
> estan declarados char
>
> Espero su repuesta y gracias de antemano
>
> Saludos
> Diego
>



Respuesta Responder a este mensaje
#4 Alejandro Mesa
11/05/2007 - 21:52 | Informe spam
Trata:

create table dbo.t1 (
cod int not null,
fecha_creada varchar(10),
hora_creada varchar(8)
)
go


insert into dbo.t1 values(1, '11/05/2007', '07:00:00')
insert into dbo.t1 values(2, '10/05/2007', '07:50:00')
insert into dbo.t1 values(3, '12/05/2007', '07:00:00')
insert into dbo.t1 values(4, '09/05/2007', '07:10:00')
insert into dbo.t1 values(5, '12/05/2007', '07:01:00')
go

;with cte
as
(
select
cod, fecha_creada, hora_creada,
row_number() over(order by cast(parsename(replace(fecha_creada, '/', '.'),
1) + '-' + parsename(replace(fecha_creada, '/', '.'), 2) + '-' +
parsename(replace(fecha_creada, '/', '.'), 3) + ' ' + hora_creada as
datetime) DESC) as rn
from
dbo.t1
)
select
cod, fecha_creada, hora_creada
from
cte
where
rn = 1
go

drop table dbo.t1
go


AMB


"Diego" wrote:

Tengo una tabla con "n" registros cada uno de los cuales tiene fecha y hora
de creación lo que necesito es obtener el ultimo aviso creado es decir el que
tiene la fecha y hora mayor, vale aclarar que mis dos campos 'fecha_creada' y
'hora_creada' estan declarados como string, no como date en mi base de
datos... Estoy trabajando con SQL SERver EXPress 2005
Ejemplo

Tabla Prueba
COd. fecha_creada hora_creada
1 11/05/2007 07:00:00
2 10/05/2007 07:50:00
3 12/05/2007 07:00:00
4 09/05/2007 07:10:00
5 12/05/2007 07:01:00 (- ESTE REGISTRO SERIA LA RESPUESTA

Aclaro nuevamente que los campos en donde se almacena la fecha y la hora
estan declarados char

Espero su repuesta y gracias de antemano

Saludos
Diego

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida