Consulta dificil

12/05/2005 - 20:55 por marco | Informe spam
Hola a todos,

Tengo que seleccionar el registro más reciente de una tabla de empleados,
donde cada persona puede tener uno o varios registros, que se diferencian
por un campo de la forma 010105, que representa una quincena, o sea que
puede tener valores como 010105, 020105, 010205, 020205, etc

Así:

Nombre QNA
Maria 010105
Maria 020105 <
Jose 020105
Jose 010205 <
Marco 010105 <
Pepe ...

Como obtengo los registros marcados, consideran que la columna QNA es de
tipo varchar?

Gracias

Marco Padierna

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
12/05/2005 - 22:10 | Informe spam
Trata,

use northwind
go

create table t1 (
nombre varchar(25),
qna varchar(6)
)
go

insert into t1 values('Maria', '010105')
insert into t1 values('Maria', '020105')
insert into t1 values('Jose', '020105')
insert into t1 values('Jose', '010205')
insert into t1 values('Marco', '010105')
go

select
nombre,
right(max(1000000 + cast(qna as int)), 6) as max_qna
from
t1
group by
nombre
order by
nombre
go

drop table t1
go


AMB


"marco" wrote:

Hola a todos,

Tengo que seleccionar el registro más reciente de una tabla de empleados,
donde cada persona puede tener uno o varios registros, que se diferencian
por un campo de la forma 010105, que representa una quincena, o sea que
puede tener valores como 010105, 020105, 010205, 020205, etc

Así:

Nombre QNA
Maria 010105
Maria 020105 <
Jose 020105
Jose 010205 <
Marco 010105 <
Pepe ...

Como obtengo los registros marcados, consideran que la columna QNA es de
tipo varchar?

Gracias

Marco Padierna




Respuesta Responder a este mensaje
#2 marco
12/05/2005 - 23:19 | Informe spam
GENIAL!!
El cuento era sumarlo a un entero.
Mil gracias

Marco Padierna

"Alejandro Mesa" escribió en el
mensaje news:
Trata,

use northwind
go

create table t1 (
nombre varchar(25),
qna varchar(6)
)
go

insert into t1 values('Maria', '010105')
insert into t1 values('Maria', '020105')
insert into t1 values('Jose', '020105')
insert into t1 values('Jose', '010205')
insert into t1 values('Marco', '010105')
go

select
nombre,
right(max(1000000 + cast(qna as int)), 6) as max_qna
from
t1
group by
nombre
order by
nombre
go

drop table t1
go


AMB


"marco" wrote:

Hola a todos,

Tengo que seleccionar el registro más reciente de una tabla de empleados,
donde cada persona puede tener uno o varios registros, que se diferencian
por un campo de la forma 010105, que representa una quincena, o sea que
puede tener valores como 010105, 020105, 010205, 020205, etc

Así:

Nombre QNA
Maria 010105
Maria 020105 <
Jose 020105
Jose 010205 <
Marco 010105 <
Pepe ...

Como obtengo los registros marcados, consideran que la columna QNA es de
tipo varchar?

Gracias

Marco Padierna




Respuesta Responder a este mensaje
#3 Max
13/05/2005 - 16:27 | Informe spam
El problema - a estas alturas ya solucionado- se produce porque el dato
QNA tiene un formato incorrecto.

Si vas a trabajar con datos texto para hacer referencia a fechas,
trimestres, quincenas, etc... te recomiendo siempre usar el formato AAMMDD
(en tu caso DD toma sólo valores 01 o 02)... Así al ordenarlos como texto te
quedan del mismo modo ordenados según la fecha que representan (lo que no
ocurre si el formato es DDMMAA). Entonces tu problema se resuelve con una
simple query que agrupe por nombre y busque el máximo string de fecha.

Max Castro V.
Santiago - Chile


"marco" <mpadierna h ot m_a.il dot c om> escribió en el mensaje
news:
Hola a todos,

Tengo que seleccionar el registro más reciente de una tabla de empleados,
donde cada persona puede tener uno o varios registros, que se diferencian
por un campo de la forma 010105, que representa una quincena, o sea que
puede tener valores como 010105, 020105, 010205, 020205, etc

Así:

Nombre QNA
Maria 010105
Maria 020105 <
Jose 020105
Jose 010205 <
Marco 010105 <
Pepe ...

Como obtengo los registros marcados, consideran que la columna QNA es de
tipo varchar?

Gracias

Marco Padierna



Respuesta Responder a este mensaje
#4 marco
13/05/2005 - 19:06 | Informe spam
Absolutamente, tienes toda la razón, el problema es que esas tablas me las
pasa otra Dirección y no hay modo de que cambien sus estándares. Pero
gracias por el comentario. Saludos

Marco Padierna


"Max" escribió en el mensaje
news:OkF$
El problema - a estas alturas ya solucionado- se produce porque el dato
QNA tiene un formato incorrecto.

Si vas a trabajar con datos texto para hacer referencia a fechas,
trimestres, quincenas, etc... te recomiendo siempre usar el formato AAMMDD
(en tu caso DD toma sólo valores 01 o 02)... Así al ordenarlos como texto
te
quedan del mismo modo ordenados según la fecha que representan (lo que no
ocurre si el formato es DDMMAA). Entonces tu problema se resuelve con una
simple query que agrupe por nombre y busque el máximo string de fecha.

Max Castro V.
Santiago - Chile


"marco" <mpadierna h ot m_a.il dot c om> escribió en el mensaje
news:
Hola a todos,

Tengo que seleccionar el registro más reciente de una tabla de empleados,
donde cada persona puede tener uno o varios registros, que se diferencian
por un campo de la forma 010105, que representa una quincena, o sea que
puede tener valores como 010105, 020105, 010205, 020205, etc

Así:

Nombre QNA
Maria 010105
Maria 020105 <
Jose 020105
Jose 010205 <
Marco 010105 <
Pepe ...

Como obtengo los registros marcados, consideran que la columna QNA es de
tipo varchar?

Gracias

Marco Padierna







Respuesta Responder a este mensaje
#5 Alejandro Mesa
13/05/2005 - 22:00 | Informe spam
Marco,

Mi solucion previa no funciona. Me confundio el resultado porque aca usamos
mmddaaaa. Me di cuenta despues del comentario de Max. Mi recomendacion es
usar tipo datetime para guardar datos tipo fecha / hora, de esta manera
tenemos todo un grupo de funciones de fecha que nos pueden servir sin tener
que convertir. Aca expongo otra solucion que lo que hace es expresar la fecha
con formato aammdd, convertirlo a fecha, calcular el maximo y luego
revertirlo al valor inicial en la tabla.

select
nombre,
replace(convert(varchar(8) , max(convert(datetime, right(qna, 2) +
substring(qna, 3, 2) + left(qna, 2), 12)), 3), '/', '') as max_qna
from
t1
group by
nombre
order by
nombre

Hubiese sido mucho mas sencillo si la columna fuese de tipo datetime.


AMB

"marco" wrote:

Absolutamente, tienes toda la razón, el problema es que esas tablas me las
pasa otra Dirección y no hay modo de que cambien sus estándares. Pero
gracias por el comentario. Saludos

Marco Padierna


"Max" escribió en el mensaje
news:OkF$
> El problema - a estas alturas ya solucionado- se produce porque el dato
> QNA tiene un formato incorrecto.
>
> Si vas a trabajar con datos texto para hacer referencia a fechas,
> trimestres, quincenas, etc... te recomiendo siempre usar el formato AAMMDD
> (en tu caso DD toma sólo valores 01 o 02)... Así al ordenarlos como texto
> te
> quedan del mismo modo ordenados según la fecha que representan (lo que no
> ocurre si el formato es DDMMAA). Entonces tu problema se resuelve con una
> simple query que agrupe por nombre y busque el máximo string de fecha.
>
> Max Castro V.
> Santiago - Chile
>
>
> "marco" <mpadierna h ot m_a.il dot c om> escribió en el mensaje
> news:
>> Hola a todos,
>>
>> Tengo que seleccionar el registro más reciente de una tabla de empleados,
>> donde cada persona puede tener uno o varios registros, que se diferencian
>> por un campo de la forma 010105, que representa una quincena, o sea que
>> puede tener valores como 010105, 020105, 010205, 020205, etc
>>
>> Así:
>>
>> Nombre QNA
>> Maria 010105
>> Maria 020105 <
>> Jose 020105
>> Jose 010205 <
>> Marco 010105 <
>> Pepe ...
>>
>> Como obtengo los registros marcados, consideran que la columna QNA es de
>> tipo varchar?
>>
>> Gracias
>>
>> Marco Padierna
>>
>>
>>
>
>



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