Obtener primera / última fila del n-th grupo consecutivo

¿Cuál es la forma más fácil de seleccionar un solo registro / valor del n-ésimo grupo? El grupo está determinado por un material y su precio (los precios pueden cambiar). Necesito encontrar la primera fecha de la última y la última fecha de la próxima a los últimos grupos de precios de material. Así que quiero saber cuándo cambió exactamente un precio.

He intentado seguir la consulta para obtener la primera fecha del precio actual (último) que puede devolver la fecha incorrecta si ese precio se usó antes:

DECLARE @material VARCHAR(20)
SET @material = '1271-4303'

SELECT TOP 1 Claim_Submitted_Date 
FROM   tabdata
WHERE Material = @material 
AND Price = (SELECT TOP 1 Price FROM tabdata t2 
             WHERE Material = @material
             ORDER BY Claim_Submitted_Date DESC)
ORDER BY Claim_Submitted_Date ASC

Esto también solo devuelve el último, ¿cómo obtengo el anterior? Entonces, ¿la fecha en la que se usó el precio anterior en último lugar?

He simplificado mi esquema y creadoeste sql-fiddle con datos de muestra. Aquí en orden cronológico. Así que la fila con ID = 7 es lo que necesito, ya que tiene el último precio con la fecha más reciente.

ID   CLAIM_SUBMITTED_DATE                   MATERIAL    PRICE
5   December, 04 2013 12:33:00+0000         1271-4303   20
4   December, 03 2013 12:33:00+0000         1271-4303   20   <-- current
3   November, 17 2013 10:13:00+0000         1271-4846   40
7   November, 08 2013 12:16:00+0000         1271-4303   18   <-- last(desired)
2   October, 17 2013 09:13:00+0000          1271-4303   18
1   September, 17 2013 08:13:00+0000        1271-4303   10
8   September, 16 2013 12:15:00+0000        1271-4303   17
6   June, 23 2013 14:22:00+0000             1271-4303   18
9   January, 11 2013 12:22:10+0000          1271-4303   20   <-- a problem since this is older than the desired but will be returned by my simply sub-query approach above

¿Es incluso posible parametrizar este valor, por lo que elnthLatestPriceGroup ¿Si quiero saber la última fecha de precio 3? Tenga en cuenta que la consulta se encuentra en una función de valor escalar.

Editar: Muchas gracias a todos. Pero desafortunadamente un simpleROW_NUMBER Parece que no ayuda aquí, ya que estoy tratando de conseguir la fila conEl precio más reciente antes del precio actual. para un material dado. Asi queGROUP BY/PARTITION BY material,price incluye filas con el mismo precio que no pertenecen al último grupo de precios de material reciente.

Considera que un precio puede cambiar desde

Date             Price     Comment
5 months ago     20        original price, note that this is the same as the curent which causes my query to fail!
3 months ago     18        price has changed, i might need the first and last date
2 months ago     20        price has changed, i might need the first and last date
1 month ago      18        previous price, i need the oldest and newest dates 
NOW              20        current price, i need the first/oldest date from this group

Así que quiero la fecha de la fila más reciente del último grupo de 20, el grupo más antiguo de 20 es irrelevante. Así que de alguna manera debo agrupar porconsecutivo Precios ya que un precio puede repetirse después de que ya haya cambiado.

Así que en realidad solo necesito lo más recienteClaim_Submitted_Date del grupo de precios que comienza con1 month ago ... previous price en la lista anterior, que es la fecha hasta que el precio anterior era válido. Las otras informaciones enumeradas en los comentarios son agradables tener (elnthLatestPriceGroup subpregunta). Esa es la fila conID=7 en los datos de muestra anteriores. Por cierto, la fila más antigua de este grupo de precios sería la deID=2(17 de octubre) y noID=6(23 de junio) incluso si este último es mayor. Había un precio diferente (10) después. Esa es la razón por la que no puedo usar funciones de clasificación simples.

Respuestas a la pregunta(4)

Su respuesta a la pregunta