FUNCION LAST

24/06/2004 - 21:31 por RONALD | Informe spam
Hola, tengo el siguiente problema:

Tengo una tabla con dos campos (y no hay llaves para
nada): serie y fecha
En dicha tabla tengo dos registros con la misma serie
pero distinta fecha.

necesito hacer un select que me devuelva solamente el
registro que contenga la fecha mas reciente.

Encontre una tal funcion LAST, pero mi sql server 2000 me
dice que no reconoce la funcion...

Alguien sabe que hacer en este caso?

Gracias

Preguntas similare

Leer las respuestas

#6 Antonio Ortiz
25/06/2004 - 16:26 | Informe spam
Yo lo haria igual que Ronald con un top

Select Top 1 * From MiTabla Where MiCampo=Valor Order By MiCampo DESC

Segun yo es mas eficiente y limpio de entender

Saludos,

Antonio Ortiz Ramirez
asesor en sistemas

www.aortiz.net
www.progvisual.com


"ulises" escribió en el mensaje
news:20c3901c45a37$4be66cf0$
Puedes usar

SELECT serie, fecha
FROM tabla t
WHERE fecha = ( select max(fecha) from tabla
where serie = a.serie )

Saludos,
Ulises

MAX ME DEVUELVE NULL...

necesito que me devuelva el contenido de todos los campos
de un solo registro, el mayor deacuerdo al campo fecha.

SERIE FECHA esos son los campos de mi tabla.

1000 26/06/2004
1000 27/06/2004 <==>

Hola, usa MAX


Salu2

Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET

Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"RONALD" escribió


en el mensaje
news:2154e01c45a21$e9d900f0$
Hola, tengo el siguiente problema:

Tengo una tabla con dos campos (y no hay llaves para
nada): serie y fecha
En dicha tabla tengo dos registros con la misma serie
pero distinta fecha.

necesito hacer un select que me devuelva solamente el
registro que contenga la fecha mas reciente.

Encontre una tal funcion LAST, pero mi sql server 2000




me
dice que no reconoce la funcion...

Alguien sabe que hacer en este caso?

Gracias










Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system


(http://www.grisoft.com).
Version: 6.0.707 / Virus Database: 463 - Release Date:


15/06/2004


.



.

Respuesta Responder a este mensaje
#7 Salvador Ramos
25/06/2004 - 16:55 | Informe spam
Hola:

Prueba lo siguiente sobre la BDD Northwind, y te quedará más claro el tema:

1) SELECT TOP 1 * FROM [Order Details] ORDER BY OrderId DESC

2) SELECT t.* FROM [Order Details] t WHERE OrderId = ( select max(OrderId)
from [Order Details])

(Ejecuta ambas instrucciones a la vez y mira los planes de ejecución)

En 1) puedes comprobar que te devuelve una sola fila, mientras que 2) te
devuelve tantas filas como veces está duplicado el valor de la columna.

Al ser un campo por el que el plan de ejecución utiliza un índice, los
planes de ejecución son iguales, y cada instrucción consume un 50% del
total.

Ahora ejecuta:

SELECT TOP 1 * FROM [Order Details]
ORDER BY UnitPrice DESC

SELECT t.* FROM [Order Details] t
WHERE UnitPrice = ( select max(UnitPrice) from [Order Details])

Verás que en este caso cambian los planes de ejecución, aunque se mantiene
el 50 % de proceso.

En cambio yo he hecho pruebas sobre una tabla mía con casi 4 millones de
registros, y ahí si que han cambiado los porcentajes de cada proceso,
ocupando el de la cláusula top un 88,09% y el de la subselect un 11,91%
En este caso ha sido mucho más rápido con la subselect :-)

Un saludo
Salvador Ramos
Murcia - España
[MVP SQL Server]
www.helpdna.net

"Antonio Ortiz" escribió en el mensaje
news:%23yxY$
Yo lo haria igual que Ronald con un top

Select Top 1 * From MiTabla Where MiCampo=Valor Order By MiCampo DESC

Segun yo es mas eficiente y limpio de entender

Saludos,

Antonio Ortiz Ramirez
asesor en sistemas

www.aortiz.net
www.progvisual.com


"ulises" escribió en el mensaje
news:20c3901c45a37$4be66cf0$
Puedes usar

SELECT serie, fecha
FROM tabla t
WHERE fecha = ( select max(fecha) from tabla
where serie = a.serie )

Saludos,
Ulises

>MAX ME DEVUELVE NULL...
>
>necesito que me devuelva el contenido de todos los campos
>de un solo registro, el mayor deacuerdo al campo fecha.
>
>SERIE FECHA esos son los campos de mi tabla.
>
>1000 26/06/2004
>1000 27/06/2004 <==> >
>
>>Hola, usa MAX
>>
>>
>>Salu2
>>
>>Maxi
>>Buenos Aires - Argentina
>>Desarrollador Microsoft 3 Estrellas .NET
>>
>>Nunca consideres el estudio como una obligación sino como
>>una oportunidad para penetrar en el bello y maravillosos
>>mundo del saber.
>>- Albert Einstein
>>
>>
>>
>>"RONALD" escribió
>en el mensaje
>>news:2154e01c45a21$e9d900f0$
>>> Hola, tengo el siguiente problema:
>>>
>>> Tengo una tabla con dos campos (y no hay llaves para
>>> nada): serie y fecha
>>> En dicha tabla tengo dos registros con la misma serie
>>> pero distinta fecha.
>>>
>>> necesito hacer un select que me devuelva solamente el
>>> registro que contenga la fecha mas reciente.
>>>
>>> Encontre una tal funcion LAST, pero mi sql server 2000
>me
>>> dice que no reconoce la funcion...
>>>
>>> Alguien sabe que hacer en este caso?
>>>
>>> Gracias
>>>
>>>
>>>
>>>
>>>
>>
>>
>>
>>Outgoing mail is certified Virus Free.
>>Checked by AVG anti-virus system
>(http://www.grisoft.com).
>>Version: 6.0.707 / Virus Database: 463 - Release Date:
>15/06/2004
>>
>>
>>.
>>
>.
>


Respuesta Responder a este mensaje
#8 Antonio Ortiz
25/06/2004 - 17:15 | Informe spam
Bueno, ante pruebas irrefutables solo me queda decir que a las pruebas se
remite.


Saludos,




Antonio Ortiz Ramirez
asesor en sistemas

www.aortiz.net
www.progvisual.com


"Salvador Ramos" escribió en el
mensaje news:##
Hola:

Prueba lo siguiente sobre la BDD Northwind, y te quedará más claro el


tema:

1) SELECT TOP 1 * FROM [Order Details] ORDER BY OrderId DESC

2) SELECT t.* FROM [Order Details] t WHERE OrderId = ( select max(OrderId)
from [Order Details])

(Ejecuta ambas instrucciones a la vez y mira los planes de ejecución)

En 1) puedes comprobar que te devuelve una sola fila, mientras que 2) te
devuelve tantas filas como veces está duplicado el valor de la columna.

Al ser un campo por el que el plan de ejecución utiliza un índice, los
planes de ejecución son iguales, y cada instrucción consume un 50% del
total.

Ahora ejecuta:

SELECT TOP 1 * FROM [Order Details]
ORDER BY UnitPrice DESC

SELECT t.* FROM [Order Details] t
WHERE UnitPrice = ( select max(UnitPrice) from [Order Details])

Verás que en este caso cambian los planes de ejecución, aunque se mantiene
el 50 % de proceso.

En cambio yo he hecho pruebas sobre una tabla mía con casi 4 millones de
registros, y ahí si que han cambiado los porcentajes de cada proceso,
ocupando el de la cláusula top un 88,09% y el de la subselect un 11,91%
En este caso ha sido mucho más rápido con la subselect :-)

Un saludo
Salvador Ramos
Murcia - España
[MVP SQL Server]
www.helpdna.net

"Antonio Ortiz" escribió en el mensaje
news:%23yxY$
> Yo lo haria igual que Ronald con un top
>
> Select Top 1 * From MiTabla Where MiCampo=Valor Order By MiCampo DESC
>
> Segun yo es mas eficiente y limpio de entender
>
> Saludos,
>
> Antonio Ortiz Ramirez
> asesor en sistemas
>
> www.aortiz.net
> www.progvisual.com
>
>
> "ulises" escribió en el mensaje
> news:20c3901c45a37$4be66cf0$
> Puedes usar
>
> SELECT serie, fecha
> FROM tabla t
> WHERE fecha = ( select max(fecha) from tabla
> where serie = a.serie )
>
> Saludos,
> Ulises
>
> >MAX ME DEVUELVE NULL...
> >
> >necesito que me devuelva el contenido de todos los campos
> >de un solo registro, el mayor deacuerdo al campo fecha.
> >
> >SERIE FECHA esos son los campos de mi tabla.
> >
> >1000 26/06/2004
> >1000 27/06/2004 <==> > >
> >
> >>Hola, usa MAX
> >>
> >>
> >>Salu2
> >>
> >>Maxi
> >>Buenos Aires - Argentina
> >>Desarrollador Microsoft 3 Estrellas .NET
> >>
> >>Nunca consideres el estudio como una obligación sino como
> >>una oportunidad para penetrar en el bello y maravillosos
> >>mundo del saber.
> >>- Albert Einstein
> >>
> >>
> >>
> >>"RONALD" escribió
> >en el mensaje
> >>news:2154e01c45a21$e9d900f0$
> >>> Hola, tengo el siguiente problema:
> >>>
> >>> Tengo una tabla con dos campos (y no hay llaves para
> >>> nada): serie y fecha
> >>> En dicha tabla tengo dos registros con la misma serie
> >>> pero distinta fecha.
> >>>
> >>> necesito hacer un select que me devuelva solamente el
> >>> registro que contenga la fecha mas reciente.
> >>>
> >>> Encontre una tal funcion LAST, pero mi sql server 2000
> >me
> >>> dice que no reconoce la funcion...
> >>>
> >>> Alguien sabe que hacer en este caso?
> >>>
> >>> Gracias
> >>>
> >>>
> >>>
> >>>
> >>>
> >>
> >>
> >>
> >>Outgoing mail is certified Virus Free.
> >>Checked by AVG anti-virus system
> >(http://www.grisoft.com).
> >>Version: 6.0.707 / Virus Database: 463 - Release Date:
> >15/06/2004
> >>
> >>
> >>.
> >>
> >.
> >
>
>


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