consulta

15/04/2005 - 11:17 por Joan Q. | Informe spam
Hola a todos/as

Una vez más abuso de vuestra amabilidad y disposición por una consulta que
se me antojaba relativamente fácil pero en la que he quedado atascado.
Joan Q

Dada la sentencia:

declare @a datetime
declare @z datetime
set @a = '20050101'
set @z = '20050131'

select t.nombre
,convert(char(12), p.f_paga, 105) as data

from trabajadores t

inner join pagastrabajador p
on t.codigoempresa = p.codigoempresa
and t.cod_trabajador = p.cod_trabajador
and p.t_paga = 1
and (p.f_paga between @a and @z)
and p.cod_centro in (1,5,7,8,13,15,16)

where t.codigoempresa = 716
and p.f_paga between @a and @z
and t.clavepercepcion <> 'g'
and ((datename (month, t.f_baja ) <> datename(month, @z)) or (t.f_baja is
null))

order by t.nombre

_____________________________
Resultado:

- Pepito 15-01-2005
- Pepito 31-01-2005
- Juan 23-01-2005
- José 30-01-2005
- José 31-01-2005
________________________________

Lo que quiero es que me regrese el trabajador con la fecha de una paga, en
caso de que haya más de una con la de fecha más reciente.

Preguntas similare

Leer las respuestas

#6 Joan Q.
15/04/2005 - 15:21 | Informe spam
Gracias Alejandro. Pero yo si sólo agrupo por t.nombre no tengo la
información de la p.f_paga y necesito esta información y debe ser de la
f_paga más reciente
Joan Q
"Alejandro Mesa" escribió en el
mensaje news:
Joan,

No debes agrupar por t.nombre y p.f_paga, sino solo por t.nombre.

> group by t.nombre, p.f_paga

...
group by t.nombre
...


AMB

"Joan Q." wrote:

> Bueno la verdad es que yo tampoco entiendo donde está el error.
>
> Voy a delimitar a un solo trabajador y te paso literalmente el select:
>
> declare @a datetime
> declare @z datetime
> set @a = '20050101'
> set @z = '20050131'
>
> select
> t.nombre, max(convert(char(12), p.f_paga, 105) )as data
>
> from trabajadores t
>
> inner join pagastrabajador p
> on t.codigoempresa = p.codigoempresa
> and t.cod_trabajador = p.cod_trabajador
> and p.t_paga = 1
> and (p.f_paga between @a and @z)
> and p.cod_centro in (1,5,7,8,13,15,16)
>
> where t.codigoempresa = 716
> and t.cod_trabajador = 125
> and p.f_paga between @a and @z
> and t.clavepercepcion <> 'g'
> and ((datename (month, t.f_baja ) <> datename(month, @z)) or (t.f_baja


is
> null))
>
> group by t.nombre, p.f_paga
> order by t.nombre
> _________________
>
> Resultado (sólo cambio el nombre del trabajador por lo de datos


personales):
>
>
> nombre data
> -
> MORRISON, STEPHAN 02-01-2005
> MORRISON, STEPHAN 31-01-2005
>
> (2 filas afectadas)
>
>
>
>
>
> "Salvador Ramos" escribió en el
> mensaje news:
> > Hola:
> >
> > No es posible, si lleva la función MAX y group by que te salga más de


una
> > fila con el mismo nombre de trabajador. Revisa que es así.
> >
> > Un saludo
> > Salvador Ramos
> > Murcia - España
> > [Microsoft MVP SQL Server]
> > www.helpdna.net (información sobre SQL server, Windows DNA y .NET)
> >
> > "Joan Q." escribió en el mensaje
> > news:
> > > Gracias por contestar.
> > > Me sale excatamente lo mismo: varias pagas de un mismo trabajador.
> > > Joan Q
> > > "Keyhelp" escribió en el mensaje
> > > news:
> > >> Prueba lo siguiente:
> > >> declare @a datetime
> > >> declare @z datetime
> > >> set @a = '20050101'
> > >> set @z = '20050131'
> > >>
> > >> select t.nombre
> > >> ,Max(convert(char(12), p.f_paga, 105)) as data
> > >> from trabajadores t
> > >> inner join pagastrabajador p
> > >> on t.codigoempresa = p.codigoempresa
> > >> and t.cod_trabajador = p.cod_trabajador
> > >> and p.t_paga = 1
> > >> and (p.f_paga between @a and @z)
> > >> and p.cod_centro in (1,5,7,8,13,15,16)
> > >> where t.codigoempresa = 716
> > >> and p.f_paga between @a and @z
> > >> and t.clavepercepcion <> 'g'
> > >> and ((datename (month, t.f_baja ) <> datename(month, @z)) or


(t.f_baja
> is
> > >> null))
> > >>
> > >> order by t.nombre
> > >> group by t.nombre
> > >>
> > >> "Joan Q." escribió en el mensaje
> > >> news:
> > >> > Hola a todos/as
> > >> >
> > >> > Una vez más abuso de vuestra amabilidad y disposición por una
> consulta
> > > que
> > >> > se me antojaba relativamente fácil pero en la que he quedado
> atascado.
> > >> > Joan Q
> > >> >
> > >> > Dada la sentencia:
> > >> >
> > >> > declare @a datetime
> > >> > declare @z datetime
> > >> > set @a = '20050101'
> > >> > set @z = '20050131'
> > >> >
> > >> > select t.nombre
> > >> > ,convert(char(12), p.f_paga, 105) as data
> > >> >
> > >> > from trabajadores t
> > >> >
> > >> > inner join pagastrabajador p
> > >> > on t.codigoempresa = p.codigoempresa
> > >> > and t.cod_trabajador = p.cod_trabajador
> > >> > and p.t_paga = 1
> > >> > and (p.f_paga between @a and @z)
> > >> > and p.cod_centro in (1,5,7,8,13,15,16)
> > >> >
> > >> > where t.codigoempresa = 716
> > >> > and p.f_paga between @a and @z
> > >> > and t.clavepercepcion <> 'g'
> > >> > and ((datename (month, t.f_baja ) <> datename(month, @z)) or
> (t.f_baja
> > > is
> > >> > null))
> > >> >
> > >> > order by t.nombre
> > >> >
> > >> > _____________________________
> > >> > Resultado:
> > >> >
> > >> > - Pepito 15-01-2005
> > >> > - Pepito 31-01-2005
> > >> > - Juan 23-01-2005
> > >> > - José 30-01-2005
> > >> > - José 31-01-2005
> > >> > ________________________________
> > >> >
> > >> > Lo que quiero es que me regrese el trabajador con la fecha de una
> paga,
> > > en
> > >> > caso de que haya más de una con la de fecha más reciente.
> > >> >
> > >> >
> > >> >
> > >>
> > >>
> > >
> > >
> >
> >
>
>
>
Respuesta Responder a este mensaje
#7 Alejandro Mesa
15/04/2005 - 15:38 | Informe spam
Joan,

Leistes la primera respuesta a tu mensage (KeyHelp)?

select t.nombre, max(f_paga) as paga_mas_reciente
from ...
group by t.nombre;


AMB

"Joan Q." wrote:

Gracias Alejandro. Pero yo si sólo agrupo por t.nombre no tengo la
información de la p.f_paga y necesito esta información y debe ser de la
f_paga más reciente
Joan Q
"Alejandro Mesa" escribió en el
mensaje news:
> Joan,
>
> No debes agrupar por t.nombre y p.f_paga, sino solo por t.nombre.
>
> > group by t.nombre, p.f_paga
>
> ...
> group by t.nombre
> ...
>
>
> AMB
>
> "Joan Q." wrote:
>
> > Bueno la verdad es que yo tampoco entiendo donde está el error.
> >
> > Voy a delimitar a un solo trabajador y te paso literalmente el select:
> >
> > declare @a datetime
> > declare @z datetime
> > set @a = '20050101'
> > set @z = '20050131'
> >
> > select
> > t.nombre, max(convert(char(12), p.f_paga, 105) )as data
> >
> > from trabajadores t
> >
> > inner join pagastrabajador p
> > on t.codigoempresa = p.codigoempresa
> > and t.cod_trabajador = p.cod_trabajador
> > and p.t_paga = 1
> > and (p.f_paga between @a and @z)
> > and p.cod_centro in (1,5,7,8,13,15,16)
> >
> > where t.codigoempresa = 716
> > and t.cod_trabajador = 125
> > and p.f_paga between @a and @z
> > and t.clavepercepcion <> 'g'
> > and ((datename (month, t.f_baja ) <> datename(month, @z)) or (t.f_baja
is
> > null))
> >
> > group by t.nombre, p.f_paga
> > order by t.nombre
> > _________________
> >
> > Resultado (sólo cambio el nombre del trabajador por lo de datos
personales):
> >
> >
> > nombre data
> > -
> > MORRISON, STEPHAN 02-01-2005
> > MORRISON, STEPHAN 31-01-2005
> >
> > (2 filas afectadas)
> >
> >
> >
> >
> >
> > "Salvador Ramos" escribió en el
> > mensaje news:
> > > Hola:
> > >
> > > No es posible, si lleva la función MAX y group by que te salga más de
una
> > > fila con el mismo nombre de trabajador. Revisa que es así.
> > >
> > > Un saludo
> > > Salvador Ramos
> > > Murcia - España
> > > [Microsoft MVP SQL Server]
> > > www.helpdna.net (información sobre SQL server, Windows DNA y .NET)
> > >
> > > "Joan Q." escribió en el mensaje
> > > news:
> > > > Gracias por contestar.
> > > > Me sale excatamente lo mismo: varias pagas de un mismo trabajador.
> > > > Joan Q
> > > > "Keyhelp" escribió en el mensaje
> > > > news:
> > > >> Prueba lo siguiente:
> > > >> declare @a datetime
> > > >> declare @z datetime
> > > >> set @a = '20050101'
> > > >> set @z = '20050131'
> > > >>
> > > >> select t.nombre
> > > >> ,Max(convert(char(12), p.f_paga, 105)) as data
> > > >> from trabajadores t
> > > >> inner join pagastrabajador p
> > > >> on t.codigoempresa = p.codigoempresa
> > > >> and t.cod_trabajador = p.cod_trabajador
> > > >> and p.t_paga = 1
> > > >> and (p.f_paga between @a and @z)
> > > >> and p.cod_centro in (1,5,7,8,13,15,16)
> > > >> where t.codigoempresa = 716
> > > >> and p.f_paga between @a and @z
> > > >> and t.clavepercepcion <> 'g'
> > > >> and ((datename (month, t.f_baja ) <> datename(month, @z)) or
(t.f_baja
> > is
> > > >> null))
> > > >>
> > > >> order by t.nombre
> > > >> group by t.nombre
> > > >>
> > > >> "Joan Q." escribió en el mensaje
> > > >> news:
> > > >> > Hola a todos/as
> > > >> >
> > > >> > Una vez más abuso de vuestra amabilidad y disposición por una
> > consulta
> > > > que
> > > >> > se me antojaba relativamente fácil pero en la que he quedado
> > atascado.
> > > >> > Joan Q
> > > >> >
> > > >> > Dada la sentencia:
> > > >> >
> > > >> > declare @a datetime
> > > >> > declare @z datetime
> > > >> > set @a = '20050101'
> > > >> > set @z = '20050131'
> > > >> >
> > > >> > select t.nombre
> > > >> > ,convert(char(12), p.f_paga, 105) as data
> > > >> >
> > > >> > from trabajadores t
> > > >> >
> > > >> > inner join pagastrabajador p
> > > >> > on t.codigoempresa = p.codigoempresa
> > > >> > and t.cod_trabajador = p.cod_trabajador
> > > >> > and p.t_paga = 1
> > > >> > and (p.f_paga between @a and @z)
> > > >> > and p.cod_centro in (1,5,7,8,13,15,16)
> > > >> >
> > > >> > where t.codigoempresa = 716
> > > >> > and p.f_paga between @a and @z
> > > >> > and t.clavepercepcion <> 'g'
> > > >> > and ((datename (month, t.f_baja ) <> datename(month, @z)) or
> > (t.f_baja
> > > > is
> > > >> > null))
> > > >> >
> > > >> > order by t.nombre
> > > >> >
> > > >> > _____________________________
> > > >> > Resultado:
> > > >> >
> > > >> > - Pepito 15-01-2005
> > > >> > - Pepito 31-01-2005
> > > >> > - Juan 23-01-2005
> > > >> > - José 30-01-2005
> > > >> > - José 31-01-2005
> > > >> > ________________________________
> > > >> >
> > > >> > Lo que quiero es que me regrese el trabajador con la fecha de una
> > paga,
> > > > en
> > > >> > caso de que haya más de una con la de fecha más reciente.
> > > >> >
> > > >> >
> > > >> >
> > > >>
> > > >>
> > > >
> > > >
> > >
> > >
> >
> >
> >



Respuesta Responder a este mensaje
#8 Joan Q.
15/04/2005 - 16:01 | Informe spam
Perdona. Tienes razón. He tenido un lapsus.
Muchas gracias a todos y perdonad mi confusión.
Joan Q

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

Leistes la primera respuesta a tu mensage (KeyHelp)?

select t.nombre, max(f_paga) as paga_mas_reciente
from ...
group by t.nombre;


AMB

"Joan Q." wrote:

> Gracias Alejandro. Pero yo si sólo agrupo por t.nombre no tengo la
> información de la p.f_paga y necesito esta información y debe ser de la
> f_paga más reciente
> Joan Q
> "Alejandro Mesa" escribió en


el
> mensaje news:
> > Joan,
> >
> > No debes agrupar por t.nombre y p.f_paga, sino solo por t.nombre.
> >
> > > group by t.nombre, p.f_paga
> >
> > ...
> > group by t.nombre
> > ...
> >
> >
> > AMB
> >
> > "Joan Q." wrote:
> >
> > > Bueno la verdad es que yo tampoco entiendo donde está el error.
> > >
> > > Voy a delimitar a un solo trabajador y te paso literalmente el


select:
> > >
> > > declare @a datetime
> > > declare @z datetime
> > > set @a = '20050101'
> > > set @z = '20050131'
> > >
> > > select
> > > t.nombre, max(convert(char(12), p.f_paga, 105) )as data
> > >
> > > from trabajadores t
> > >
> > > inner join pagastrabajador p
> > > on t.codigoempresa = p.codigoempresa
> > > and t.cod_trabajador = p.cod_trabajador
> > > and p.t_paga = 1
> > > and (p.f_paga between @a and @z)
> > > and p.cod_centro in (1,5,7,8,13,15,16)
> > >
> > > where t.codigoempresa = 716
> > > and t.cod_trabajador = 125
> > > and p.f_paga between @a and @z
> > > and t.clavepercepcion <> 'g'
> > > and ((datename (month, t.f_baja ) <> datename(month, @z)) or


(t.f_baja
> is
> > > null))
> > >
> > > group by t.nombre, p.f_paga
> > > order by t.nombre
> > > _________________
> > >
> > > Resultado (sólo cambio el nombre del trabajador por lo de datos
> personales):
> > >
> > >
> > > nombre data
> > > -
> > > MORRISON, STEPHAN 02-01-2005
> > > MORRISON, STEPHAN 31-01-2005
> > >
> > > (2 filas afectadas)
> > >
> > >
> > >
> > >
> > >
> > > "Salvador Ramos" escribió en


el
> > > mensaje news:
> > > > Hola:
> > > >
> > > > No es posible, si lleva la función MAX y group by que te salga más


de
> una
> > > > fila con el mismo nombre de trabajador. Revisa que es así.
> > > >
> > > > Un saludo
> > > > Salvador Ramos
> > > > Murcia - España
> > > > [Microsoft MVP SQL Server]
> > > > www.helpdna.net (información sobre SQL server, Windows DNA y .NET)
> > > >
> > > > "Joan Q." escribió en el mensaje
> > > > news:
> > > > > Gracias por contestar.
> > > > > Me sale excatamente lo mismo: varias pagas de un mismo


trabajador.
> > > > > Joan Q
> > > > > "Keyhelp" escribió en el


mensaje
> > > > > news:
> > > > >> Prueba lo siguiente:
> > > > >> declare @a datetime
> > > > >> declare @z datetime
> > > > >> set @a = '20050101'
> > > > >> set @z = '20050131'
> > > > >>
> > > > >> select t.nombre
> > > > >> ,Max(convert(char(12), p.f_paga, 105)) as data
> > > > >> from trabajadores t
> > > > >> inner join pagastrabajador p
> > > > >> on t.codigoempresa = p.codigoempresa
> > > > >> and t.cod_trabajador = p.cod_trabajador
> > > > >> and p.t_paga = 1
> > > > >> and (p.f_paga between @a and @z)
> > > > >> and p.cod_centro in (1,5,7,8,13,15,16)
> > > > >> where t.codigoempresa = 716
> > > > >> and p.f_paga between @a and @z
> > > > >> and t.clavepercepcion <> 'g'
> > > > >> and ((datename (month, t.f_baja ) <> datename(month, @z)) or
> (t.f_baja
> > > is
> > > > >> null))
> > > > >>
> > > > >> order by t.nombre
> > > > >> group by t.nombre
> > > > >>
> > > > >> "Joan Q." escribió en el mensaje
> > > > >> news:
> > > > >> > Hola a todos/as
> > > > >> >
> > > > >> > Una vez más abuso de vuestra amabilidad y disposición por una
> > > consulta
> > > > > que
> > > > >> > se me antojaba relativamente fácil pero en la que he quedado
> > > atascado.
> > > > >> > Joan Q
> > > > >> >
> > > > >> > Dada la sentencia:
> > > > >> >
> > > > >> > declare @a datetime
> > > > >> > declare @z datetime
> > > > >> > set @a = '20050101'
> > > > >> > set @z = '20050131'
> > > > >> >
> > > > >> > select t.nombre
> > > > >> > ,convert(char(12), p.f_paga, 105) as data
> > > > >> >
> > > > >> > from trabajadores t
> > > > >> >
> > > > >> > inner join pagastrabajador p
> > > > >> > on t.codigoempresa = p.codigoempresa
> > > > >> > and t.cod_trabajador = p.cod_trabajador
> > > > >> > and p.t_paga = 1
> > > > >> > and (p.f_paga between @a and @z)
> > > > >> > and p.cod_centro in (1,5,7,8,13,15,16)
> > > > >> >
> > > > >> > where t.codigoempresa = 716
> > > > >> > and p.f_paga between @a and @z
> > > > >> > and t.clavepercepcion <> 'g'
> > > > >> > and ((datename (month, t.f_baja ) <> datename(month, @z)) or
> > > (t.f_baja
> > > > > is
> > > > >> > null))
> > > > >> >
> > > > >> > order by t.nombre
> > > > >> >
> > > > >> > _____________________________
> > > > >> > Resultado:
> > > > >> >
> > > > >> > - Pepito 15-01-2005
> > > > >> > - Pepito 31-01-2005
> > > > >> > - Juan 23-01-2005
> > > > >> > - José 30-01-2005
> > > > >> > - José 31-01-2005
> > > > >> > ________________________________
> > > > >> >
> > > > >> > Lo que quiero es que me regrese el trabajador con la fecha de


una
> > > paga,
> > > > > en
> > > > >> > caso de que haya más de una con la de fecha más reciente.
> > > > >> >
> > > > >> >
> > > > >> >
> > > > >>
> > > > >>
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> > >
>
>
>
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida