SQL Server - Obtener los dos últimos registros de cada cliente que cumplen una condición

   
Vista:

Obtener los dos últimos registros de cada cliente que cumplen una condición

Publicado por ANGEL (6 intervenciones) el 04/11/2014 18:34:51
Buenas tardes, soy nuevo en el foro. Estoy haciendo una consulta en la que quiero que me aparezcan los dos últimos movimientos de cada cliente que cumplen una condición específica. Tengo el siguiente código:
SELECT TOP (100) PERCENT Empresa, AñoLectura, BimLectura, CodAbonado, FechaLectura, Señal
FROM dbo.LECTURAS
WHERE Empresa = 1 AND AñoLectura = 2014 AND Señal = 'E'
ORDER BY CodAbonado, FechaLectura

Con este códgio muestro todos los movimientos del cliente que cumplen las condiciones especificadas pero necesito que sólo salgan los dos últimos.
Agradecería si me podéis ayudar.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias

Obtener los dos últimos registros de cada cliente que cumplen una condición

Publicado por Isaias (3181 intervenciones) el 05/11/2014 19:14:58
En otro foro ya estas recibiendo ayuda, pero lo mas importante es especificar que base de datos ocupas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Obtener los dos últimos registros de cada cliente que cumplen una condición

Publicado por angelgcbf (6 intervenciones) el 06/11/2014 19:44:35
La base de datos es Sql Server 2012
Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Obtener los dos últimos registros de cada cliente que cumplen una condición

Publicado por Roberto F. (3 intervenciones) el 07/11/2014 19:57:54
Hola:
¿Has probado algo así?

select LECTURAS.*
from LECTURAS
inner join
(
select LECTURAS.CodAbonado,max(FechaLectura) as fecha
from LECTURAS
inner join (
SELECT CodAbonado,max(FechaLectura) as fecha
from LECTURAS group by CodAbonado
) as ultimas
on LECTURAS.CodAbonado=ultimas.CodAbonado
where LECTURAS.FechaLectura<ultimas.fecha
group by LECTURAS.CodAbonado
) as penultimas_fechas
on LECTURAS.CodAbonado=penultimas_fechas.CodAbonado
where LECTURAS.FechaLectura>=penultimas_fechas.fecha
order by LECTURAS.CodAbonado,FechaLectura desc
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Isaias

Obtener los dos últimos registros de cada cliente que cumplen una condición

Publicado por Isaias (3181 intervenciones) el 10/11/2014 17:20:06
-- En este ejemplo, se obtienen los 3 primeros registros, el ASC o DESC, te dan los últimos o los primeros.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
select * from
(
select a.folio,
	a.fecha,
	a.documento,
	b.articulo,
	b.descripcionarticulo,
	b.precio,
	ROW_NUMBER () OVER (PARTITION BY a.folio,
					a.fecha,
					a.documento,
					b.articulo,
					b.descripcionarticulo,
					b.precio ORDER BY a.folio,
					a.fecha,
					a.documento,
					b.articulo,
					b.descripcionarticulo, b.precio ASC) AS RN
from entradaencabezado a, entradadetalle b
) t1 where rn <=3
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Obtener los dos últimos registros de cada cliente que cumplen una condición

Publicado por Edgar (1 intervención) el 10/11/2014 18:18:24
Espero estar entendiendo bien lo que pides, es una consulta muy sencilla en la cual solo tienes que especificar cuantos registros necesitas, ordenarlos por una columna especifica, de preferencia la columna que sea auto incrementa-ble y que sea en orden descendente:

select top 2 *
from [Tabla]
where [Campo para Condicion]='Condicion'
order by [Campo Auto Incrementable] desc

Espero te sirva, Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias

Obtener los dos últimos registros de cada cliente que cumplen una condición

Publicado por Isaias (3181 intervenciones) el 11/11/2014 00:08:18
Edgar

Son los DOS ULTIMOS registros, POR CLIENTE
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Obtener los dos últimos registros de cada cliente que cumplen una condición

Publicado por ANGEL (6 intervenciones) el 16/11/2014 20:59:03
Gracias Edgar, con tu ejemplo me da sólo 2 resultados no los dos últimos de cada cliente.
Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Obtener los dos últimos registros de cada cliente que cumplen una condición

Publicado por ANGEL (6 intervenciones) el 16/11/2014 20:53:52
Gracias Isaías, no he conseguido ejecutar la consulta que me indicabas. No la logro entender. Gracias de todas formas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Obtener los dos últimos registros de cada cliente que cumplen una condición

Publicado por ANGEL (6 intervenciones) el 16/11/2014 20:43:40
Gracias Roberto, me ha funcionado. Tan solo he tenido que poner dos filtros:
SELECT TOP (100) PERCENT dbo.LECTURAS.Empresa, dbo.LECTURAS.AñoLectura, dbo.LECTURAS.BimLectura, dbo.LECTURAS.CodAbonado, dbo.LECTURAS.FechaLectura,
dbo.LECTURAS.Señal
FROM dbo.LECTURAS INNER JOIN
(SELECT LECTURAS_2.CodAbonado, MAX(LECTURAS_2.FechaLectura) AS fecha
FROM dbo.LECTURAS AS LECTURAS_2 INNER JOIN
(SELECT CodAbonado, MAX(FechaLectura) AS fecha
FROM dbo.LECTURAS AS LECTURAS_1
GROUP BY CodAbonado) AS ultimas ON LECTURAS_2.CodAbonado = ultimas.CodAbonado AND LECTURAS_2.FechaLectura < ultimas.fecha
GROUP BY LECTURAS_2.CodAbonado) AS penultimas_fechas ON dbo.LECTURAS.CodAbonado = penultimas_fechas.CodAbonado AND
dbo.LECTURAS.FechaLectura >= penultimas_fechas.fecha
WHERE (dbo.LECTURAS.Empresa = 1) AND (dbo.LECTURAS.Señal = 'E')
ORDER BY dbo.LECTURAS.CodAbonado, dbo.LECTURAS.FechaLectura DESC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Obtener los dos últimos registros de cada cliente que cumplen una condición

Publicado por Ruben (4 intervenciones) el 15/11/2014 01:27:34
toma tu consulta y haces esto a ver si te sirve:

SELECT TOP 2 Empresa, AñoLectura, BimLectura, CodAbonado, FechaLectura, Señal
FROM dbo.LECTURAS
WHERE Empresa = 1 AND AñoLectura = 2014 AND Señal = 'E'
ORDER BY CodAbonado DESC, FechaLectura DESC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Obtener los dos últimos registros de cada cliente que cumplen una condición

Publicado por ANGEL (6 intervenciones) el 16/11/2014 21:05:31
Gracias Rubén pero según me indicas sólo me muestra dos registros, yo lo que quiero conseguir son los dos últimos registros de cada cliente, si tengo 100 clientes me tiene que mostrar 200 registros. La consulta de Roberto me ha funcionado
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar