Pregunta Facil

23/06/2005 - 21:11 por Irak Rubio | Informe spam
Hola que tal, tengo dos columnas y que son Nombre y Fecha, Deséo obtener el
nombre de ese registro que tenga la fecha mas alta pero solo necesito
recuperar un registro y debo mencionar que en la fecha puede haber varios
campos iguales.

Esto loquiero precisamente para una subconsulta que me debe devolver un
registro.

He intentado hacerlo con:
Top 1 Percent, pero mi tabla es demasiado grande y hay veces que me trae mas
de un registro
y he puesto algo que mas omenos me funciona y es asi:

Set @User = (Select User1 From Soshipline Where ShipperId='ETA0034515' AND
User10 = (Select MAX(User10) From Soshipline Where
ShipperId='ETA0034515')Group by User1, User10)

Pero aun no estoy seguro Existe alguna funcion para tal efecto? gracias

Con Group By me trae lo mismo

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
23/06/2005 - 21:35 | Informe spam
Irak,

Set @User = (Select User1 From Soshipline Where ShipperId='ETA0034515' AND
User10 = (Select MAX(User10) From Soshipline Where
ShipperId='ETA0034515')Group by User1, User10)



Pudieras agrupar solo por [User1], pues [User10] es igual para todas las
filas resultantes. Tambien puedes usar "select top 1" sin la palabra
"Percent", pues el uno porciento de 200 es 2 (dos) y ahi es donde puedes
tener problemas.

Ejemplo:

Set @User = (

Select top 1
User1
From
Soshipline
Where
ShipperId='ETA0034515'
AND User10 = (Select MAX(User10) From Soshipline Where
ShipperId='ETA0034515')
)


A proposito, espero hayas leido mi ultimo posting a tu mensaje sobre
timestamp.


AMB

"Irak Rubio" wrote:

Hola que tal, tengo dos columnas y que son Nombre y Fecha, Deséo obtener el
nombre de ese registro que tenga la fecha mas alta pero solo necesito
recuperar un registro y debo mencionar que en la fecha puede haber varios
campos iguales.

Esto loquiero precisamente para una subconsulta que me debe devolver un
registro.

He intentado hacerlo con:
Top 1 Percent, pero mi tabla es demasiado grande y hay veces que me trae mas
de un registro
y he puesto algo que mas omenos me funciona y es asi:

Set @User = (Select User1 From Soshipline Where ShipperId='ETA0034515' AND
User10 = (Select MAX(User10) From Soshipline Where
ShipperId='ETA0034515')Group by User1, User10)

Pero aun no estoy seguro Existe alguna funcion para tal efecto? gracias

Con Group By me trae lo mismo
Respuesta Responder a este mensaje
#2 Irak Rubio
23/06/2005 - 23:09 | Informe spam
Hola Alejandro, Efectivamente leí el ultimo post que me hiciste el favor de
contestar, y tardé un poco más en realizar las pruebas pero éstas fueron
realmente satisfactorias.

Por cierto, O sea a ver si entendí con respecto al manejo del TOP: Si yo le
agrego La cláusula PERCENT, entonces el top (como es de esperar) me devuelve
el porcentaje de las filas que existen de acuerdo al resultado ¿No?, pero, Si
no le pongo PERCENT a la cláusula TOP y nada más le dejo el SELECT TOP 1
From...
Entonces simplemente me devolvera un solo registro?, y en este caso, si
existen varios registros con el dato de la fecha (que es la que evaluamos con
el TOP) pero con Usuarios diferentes, En que se basaría SQL para mostrarme a
cualquiera de ellos?.

Saludos .

"Alejandro Mesa" escribió:

Irak,

> Set @User = (Select User1 From Soshipline Where ShipperId='ETA0034515' AND
> User10 = (Select MAX(User10) From Soshipline Where
> ShipperId='ETA0034515')Group by User1, User10)

Pudieras agrupar solo por [User1], pues [User10] es igual para todas las
filas resultantes. Tambien puedes usar "select top 1" sin la palabra
"Percent", pues el uno porciento de 200 es 2 (dos) y ahi es donde puedes
tener problemas.

Ejemplo:

Set @User = (

Select top 1
User1
From
Soshipline
Where
ShipperId='ETA0034515'
AND User10 = (Select MAX(User10) From Soshipline Where
ShipperId='ETA0034515')
)


A proposito, espero hayas leido mi ultimo posting a tu mensaje sobre
timestamp.


AMB

"Irak Rubio" wrote:

> Hola que tal, tengo dos columnas y que son Nombre y Fecha, Deséo obtener el
> nombre de ese registro que tenga la fecha mas alta pero solo necesito
> recuperar un registro y debo mencionar que en la fecha puede haber varios
> campos iguales.
>
> Esto loquiero precisamente para una subconsulta que me debe devolver un
> registro.
>
> He intentado hacerlo con:
> Top 1 Percent, pero mi tabla es demasiado grande y hay veces que me trae mas
> de un registro
> y he puesto algo que mas omenos me funciona y es asi:
>
> Set @User = (Select User1 From Soshipline Where ShipperId='ETA0034515' AND
> User10 = (Select MAX(User10) From Soshipline Where
> ShipperId='ETA0034515')Group by User1, User10)
>
> Pero aun no estoy seguro Existe alguna funcion para tal efecto? gracias
>
> Con Group By me trae lo mismo
Respuesta Responder a este mensaje
#3 Irak Rubio
23/06/2005 - 23:16 | Informe spam
Y bueno, nuevamente ha sido un éxito tu ayuda, no me que nada mas que decirte
que

Me das envidia, de la buena pero al fin...
Gracias ;-)

"Irak Rubio" escribió:

Hola Alejandro, Efectivamente leí el ultimo post que me hiciste el favor de
contestar, y tardé un poco más en realizar las pruebas pero éstas fueron
realmente satisfactorias.

Por cierto, O sea a ver si entendí con respecto al manejo del TOP: Si yo le
agrego La cláusula PERCENT, entonces el top (como es de esperar) me devuelve
el porcentaje de las filas que existen de acuerdo al resultado ¿No?, pero, Si
no le pongo PERCENT a la cláusula TOP y nada más le dejo el SELECT TOP 1
From...
Entonces simplemente me devolvera un solo registro?, y en este caso, si
existen varios registros con el dato de la fecha (que es la que evaluamos con
el TOP) pero con Usuarios diferentes, En que se basaría SQL para mostrarme a
cualquiera de ellos?.

Saludos .

"Alejandro Mesa" escribió:

> Irak,
>
> > Set @User = (Select User1 From Soshipline Where ShipperId='ETA0034515' AND
> > User10 = (Select MAX(User10) From Soshipline Where
> > ShipperId='ETA0034515')Group by User1, User10)
>
> Pudieras agrupar solo por [User1], pues [User10] es igual para todas las
> filas resultantes. Tambien puedes usar "select top 1" sin la palabra
> "Percent", pues el uno porciento de 200 es 2 (dos) y ahi es donde puedes
> tener problemas.
>
> Ejemplo:
>
> Set @User = (
>
> Select top 1
> User1
> From
> Soshipline
> Where
> ShipperId='ETA0034515'
> AND User10 = (Select MAX(User10) From Soshipline Where
> ShipperId='ETA0034515')
> )
>
>
> A proposito, espero hayas leido mi ultimo posting a tu mensaje sobre
> timestamp.
>
>
> AMB
>
> "Irak Rubio" wrote:
>
> > Hola que tal, tengo dos columnas y que son Nombre y Fecha, Deséo obtener el
> > nombre de ese registro que tenga la fecha mas alta pero solo necesito
> > recuperar un registro y debo mencionar que en la fecha puede haber varios
> > campos iguales.
> >
> > Esto loquiero precisamente para una subconsulta que me debe devolver un
> > registro.
> >
> > He intentado hacerlo con:
> > Top 1 Percent, pero mi tabla es demasiado grande y hay veces que me trae mas
> > de un registro
> > y he puesto algo que mas omenos me funciona y es asi:
> >
> > Set @User = (Select User1 From Soshipline Where ShipperId='ETA0034515' AND
> > User10 = (Select MAX(User10) From Soshipline Where
> > ShipperId='ETA0034515')Group by User1, User10)
> >
> > Pero aun no estoy seguro Existe alguna funcion para tal efecto? gracias
> >
> > Con Group By me trae lo mismo
Respuesta Responder a este mensaje
#4 Alejandro Mesa
24/06/2005 - 14:52 | Informe spam
Irak,

Por cierto, O sea a ver si entendí con respecto al manejo del TOP: Si yo le
agrego La cláusula PERCENT, entonces el top (como es de esperar) me devuelve
el porcentaje de las filas que existen de acuerdo al resultado ¿No?, pero, Si
no le pongo PERCENT a la cláusula TOP y nada más le dejo el SELECT TOP 1
From...
Entonces simplemente me devolvera un solo registro?, y en este caso, si
existen varios registros con el dato de la fecha (que es la que evaluamos con
el TOP) pero con Usuarios diferentes, En que se basaría SQL para mostrarme a
cualquiera de ellos?.



Estendistes muy bien. En cuanto a tu pregunta, si no usas la clausula "order
by", o si la usas y existen multiples filas que cumplen con el criteria de
esta clausula, entonces sql server tomara la primera fila del resultado, la
cual puede ser cualquiera, pues en ese punto ya no hay un criterio de
selccion. Sin embargo cuando usamos la clausula "order by" y el resultado,
basado en este criterio, no incluye filas con igual valor, entonces el
criterio de selccion esta bien definido. Si el resultado incluye filas con
igual valor en las columnas usadas en el criterio de la clausula "order by",
entonces como dije antes, ya no hay criterio alguno para seleccionar el
primero de ese conjunto, al menos que agregues otra columna para ser usada
dentro de este subgrupo o uses la opcion "with ties" en la sentencia select,
indicandole a sql server que selccione todas las filas que tienen el mismo
valor en esas columnas.

Ejemplo:

select
customerid,
orderdate
from
dbo.orders
group by
customerid,
orderdate

select top 1 percent
customerid,
orderdate
from
dbo.orders
group by
customerid,
orderdate

select top 1
customerid,
orderdate
from
dbo.orders
group by
customerid,
orderdate

select top 1
customerid,
orderdate
from
dbo.orders
order by
orderdate desc

ordenamiento
select top 1
customerid,
orderdate
from
dbo.orders
order by
orderdate desc,
orderid asc

select top 1 with ties
customerid,
orderdate
from
dbo.orders
order by
orderdate desc
go


AMB

"Irak Rubio" wrote:

Hola Alejandro, Efectivamente leí el ultimo post que me hiciste el favor de
contestar, y tardé un poco más en realizar las pruebas pero éstas fueron
realmente satisfactorias.

Por cierto, O sea a ver si entendí con respecto al manejo del TOP: Si yo le
agrego La cláusula PERCENT, entonces el top (como es de esperar) me devuelve
el porcentaje de las filas que existen de acuerdo al resultado ¿No?, pero, Si
no le pongo PERCENT a la cláusula TOP y nada más le dejo el SELECT TOP 1
From...
Entonces simplemente me devolvera un solo registro?, y en este caso, si
existen varios registros con el dato de la fecha (que es la que evaluamos con
el TOP) pero con Usuarios diferentes, En que se basaría SQL para mostrarme a
cualquiera de ellos?.

Saludos .

"Alejandro Mesa" escribió:

> Irak,
>
> > Set @User = (Select User1 From Soshipline Where ShipperId='ETA0034515' AND
> > User10 = (Select MAX(User10) From Soshipline Where
> > ShipperId='ETA0034515')Group by User1, User10)
>
> Pudieras agrupar solo por [User1], pues [User10] es igual para todas las
> filas resultantes. Tambien puedes usar "select top 1" sin la palabra
> "Percent", pues el uno porciento de 200 es 2 (dos) y ahi es donde puedes
> tener problemas.
>
> Ejemplo:
>
> Set @User = (
>
> Select top 1
> User1
> From
> Soshipline
> Where
> ShipperId='ETA0034515'
> AND User10 = (Select MAX(User10) From Soshipline Where
> ShipperId='ETA0034515')
> )
>
>
> A proposito, espero hayas leido mi ultimo posting a tu mensaje sobre
> timestamp.
>
>
> AMB
>
> "Irak Rubio" wrote:
>
> > Hola que tal, tengo dos columnas y que son Nombre y Fecha, Deséo obtener el
> > nombre de ese registro que tenga la fecha mas alta pero solo necesito
> > recuperar un registro y debo mencionar que en la fecha puede haber varios
> > campos iguales.
> >
> > Esto loquiero precisamente para una subconsulta que me debe devolver un
> > registro.
> >
> > He intentado hacerlo con:
> > Top 1 Percent, pero mi tabla es demasiado grande y hay veces que me trae mas
> > de un registro
> > y he puesto algo que mas omenos me funciona y es asi:
> >
> > Set @User = (Select User1 From Soshipline Where ShipperId='ETA0034515' AND
> > User10 = (Select MAX(User10) From Soshipline Where
> > ShipperId='ETA0034515')Group by User1, User10)
> >
> > Pero aun no estoy seguro Existe alguna funcion para tal efecto? gracias
> >
> > Con Group By me trae lo mismo
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida