Seleccionar ultimos registros de cada registro

23/11/2009 - 13:50 por Fran | Informe spam
Buenas tardes

Tengo una select en una base de datos de esta forma:

SELECT IDPaciente, fecha, observaciones FROM dbo.observaciones WHERE
fecha>= CONVERT(datetime, convert(varchar(10), GETDATE() ,120), 120)
ORDER BY fecha DESC"

y una tabla con la siguiente información

IDPaciente Fecha Observaciones
1 14/05/07 observaciones..
1 14/05/07 observaciones 2
2 15/06/07 observaciones
4 16/06/07 ...
3 16/06/07-
2 16/07/09
1 17/07/09

Lo que quiero es que solamente muestre el último registro de cada
paciente, quedando de esta forma

1 17/07/09
2 16/07/09
3 16/06/07
4 16/06/07

cómo podría hacerlo?

Muchas gracias

Preguntas similare

Leer las respuestas

#1 Maxi Accotto
23/11/2009 - 15:26 | Informe spam
Hola, fijate algo como esto:

SELECT orderid, orderdate, empid, custid
FROM Sales.Orders
WHERE orderid = (SELECT MAX(O.orderid)
FROM Sales.Orders AS O);




Maxi Accotto
MVP en SQL Server
http://blog.maxiaccotto.com

"Fran" wrote in message
news:
Buenas tardes

Tengo una select en una base de datos de esta forma:

SELECT IDPaciente, fecha, observaciones FROM dbo.observaciones WHERE
fecha>= CONVERT(datetime, convert(varchar(10), GETDATE() ,120), 120)
ORDER BY fecha DESC"

y una tabla con la siguiente información

IDPaciente Fecha Observaciones
1 14/05/07 observaciones..
1 14/05/07 observaciones 2
2 15/06/07 observaciones
4 16/06/07 ...
3 16/06/07-
2 16/07/09
1 17/07/09

Lo que quiero es que solamente muestre el último registro de cada
paciente, quedando de esta forma

1 17/07/09
2 16/07/09
3 16/06/07
4 16/06/07

cómo podría hacerlo?

Muchas gracias


Respuesta Responder a este mensaje
#2 Carlos Sacristan
23/11/2009 - 15:55 | Informe spam
Agrupando por paciente y preguntando por la mayor fecha de cada uno de
ellos. Algo como

SELECT IdPaciente, MAX(Fecha) AS Fecha
FROM dbo.observaciones
GROUP BY IdPaciente

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático


"Fran" wrote in message
news:
Buenas tardes

Tengo una select en una base de datos de esta forma:

SELECT IDPaciente, fecha, observaciones FROM dbo.observaciones WHERE
fecha>= CONVERT(datetime, convert(varchar(10), GETDATE() ,120), 120)
ORDER BY fecha DESC"

y una tabla con la siguiente información

IDPaciente Fecha Observaciones
1 14/05/07 observaciones..
1 14/05/07 observaciones 2
2 15/06/07 observaciones
4 16/06/07 ...
3 16/06/07-
2 16/07/09
1 17/07/09

Lo que quiero es que solamente muestre el último registro de cada
paciente, quedando de esta forma

1 17/07/09
2 16/07/09
3 16/06/07
4 16/06/07

cómo podría hacerlo?

Muchas gracias
Respuesta Responder a este mensaje
#3 Fran
23/11/2009 - 16:57 | Informe spam
Con ese metodo solamente me tira los de un tipo, es decir, me devuelve
todos los códigos 1 de esta forma
1 16/07/09
1 170909
1
1
1
1
1
y asi
pero no me muestra los demas pacientes





On 23 nov, 15:26, "Maxi Accotto" wrote:
Hola, fijate algo como esto:

SELECT orderid, orderdate, empid, custid
FROM Sales.Orders
WHERE orderid = (SELECT MAX(O.orderid)
                 FROM Sales.Orders AS O);



Maxi Accotto
MVP en SQL Serverhttp://blog.maxiaccotto.com

"Fran" wrote in message

news:



> Buenas tardes

> Tengo una select en una base de datos de esta forma:

> SELECT IDPaciente, fecha, observaciones   FROM dbo.observaciones WHERE
> fecha>= CONVERT(datetime, convert(varchar(10), GETDATE() ,120), 120)
> ORDER BY fecha DESC"

> y una tabla con la siguiente información

> IDPaciente Fecha Observaciones
> 1         14/05/07 observaciones..
> 1         14/05/07  observaciones 2
> 2        15/06/07  observaciones
> 4        16/06/07 ...
> 3         16/06/07-
> 2          16/07/09
> 1         17/07/09

> Lo que quiero es que solamente muestre el último registro de cada
> paciente, quedando de esta forma

> 1  17/07/09
> 2  16/07/09
> 3  16/06/07
> 4   16/06/07

> cómo podría hacerlo?

> Muchas gracias
Respuesta Responder a este mensaje
#4 Fran
23/11/2009 - 17:10 | Informe spam
Hola Carlos.

Con ese metodo si que me lo muestra pero en cuanto en el select le
meto más campos ya me muestra mas registros

On 23 nov, 15:55, "Carlos Sacristan" wrote:
Agrupando por paciente y preguntando por la mayor fecha de cada uno de
ellos. Algo como

SELECT IdPaciente, MAX(Fecha) AS Fecha
FROM dbo.observaciones
GROUP BY IdPaciente

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático

"Fran" wrote in message

news:
Buenas tardes

Tengo una select en una base de datos de esta forma:

SELECT IDPaciente, fecha, observaciones   FROM dbo.observaciones WHERE
fecha>= CONVERT(datetime, convert(varchar(10), GETDATE() ,120), 120)
ORDER BY fecha DESC"

y una tabla con la siguiente información

IDPaciente Fecha Observaciones
1         14/05/07 observaciones..
1         14/05/07  observaciones 2
2        15/06/07  observaciones
4        16/06/07 ...
3         16/06/07-
2          16/07/09
1         17/07/09

Lo que quiero es que solamente muestre el último registro de cada
paciente, quedando de esta forma

1  17/07/09
2  16/07/09
3  16/06/07
4   16/06/07

cómo podría hacerlo?

Muchas gracias
Respuesta Responder a este mensaje
#5 Carlos Sacristan
23/11/2009 - 17:27 | Informe spam
Claro, pero eso es un nuevo requisito que no indicabas antes. Una solución,
suponiendo que no te importe obtener más de un registro por paciente en el
caso de que la fecha para el mismo se repita, podría ser:

SELECT o.*
FROM dbo.observaciones AS o
INNER JOIN (SELECT IdPaciente, MAX(Fecha) AS Fecha FROM
dbo.observaciones GROUP BY IdPaciente) AS m ON o.IdPaciente=m.IdPaciente AND
o.Fecha=m.Fecha

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático


"Fran" wrote in message
news:
Hola Carlos.

Con ese metodo si que me lo muestra pero en cuanto en el select le
meto más campos ya me muestra mas registros

On 23 nov, 15:55, "Carlos Sacristan" wrote:
Agrupando por paciente y preguntando por la mayor fecha de cada uno de
ellos. Algo como

SELECT IdPaciente, MAX(Fecha) AS Fecha
FROM dbo.observaciones
GROUP BY IdPaciente

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático

"Fran" wrote in message

news:
Buenas tardes

Tengo una select en una base de datos de esta forma:

SELECT IDPaciente, fecha, observaciones FROM dbo.observaciones WHERE
fecha>= CONVERT(datetime, convert(varchar(10), GETDATE() ,120), 120)
ORDER BY fecha DESC"

y una tabla con la siguiente información

IDPaciente Fecha Observaciones
1 14/05/07 observaciones..
1 14/05/07 observaciones 2
2 15/06/07 observaciones
4 16/06/07 ...
3 16/06/07-
2 16/07/09
1 17/07/09

Lo que quiero es que solamente muestre el último registro de cada
paciente, quedando de esta forma

1 17/07/09
2 16/07/09
3 16/06/07
4 16/06/07

cómo podría hacerlo?

Muchas gracias
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida