Sql 如何比较上一条记录和上一条记录-1?

Sql 如何比较上一条记录和上一条记录-1?,sql,sql-server,Sql,Sql Server,假设我有一个来自join select的表,如下所示: No.Transaction Item Name PRICE TC0001 Book 15 TC0001 Pencil 2 TC0001 Eraser 1 TC0002 Book 12 TC0002 Eraser 1.5 TC0003 Pencil

假设我有一个来自join select的表,如下所示:

No.Transaction   Item Name   PRICE
TC0001           Book        15
TC0001           Pencil      2
TC0001           Eraser      1
TC0002           Book        12
TC0002           Eraser      1.5
TC0003           Pencil      1.8
TC0003           Book        20
;WITH t AS (
    SELECT *
        , ROW_NUMBER() OVER (PARTITION BY [Item Name] 
                             ORDER BY [No.Transaction] DESC) As seq
    FROM yourTable)
SELECT t1.[Item Name]
    , t1.PRICE As lastPrice
    , t2.PRICE As preLastPrice
    , t1.PRICE - ISNULL(t2.PRICE, 0) As changePrice
FROM t t1
    LEFT JOIN
     t t2 ON t1.[Item Name] = t2.[Item Name] AND t1.seq = t2.seq - 1
WHERE (t1.seq = 1);
我想比较同一商品名称的上次价格和上次价格。例如,
书是20和12
铅笔是1.8和2


我如何才能做到这一点?

查询操作。添加分组依据、限制(2)、订单说明。你们应该得到你们所需要的。

你们必须为你们的结果找到一列,然后使用
densite\u RANK()
像这样得到最后两行

SELECT *
(
    SELECT transactionId
        ,itm_name
        ,price
        ,DENSE_RANK() OVER (PARTITION BY itm_name ORDER BY created_date DESC) AS [rank]
    FROM tbl
) res
WHERE res.[rank] IN (1,2)
ORDER BY res.[rank] 

我认为您需要这样的查询:

No.Transaction   Item Name   PRICE
TC0001           Book        15
TC0001           Pencil      2
TC0001           Eraser      1
TC0002           Book        12
TC0002           Eraser      1.5
TC0003           Pencil      1.8
TC0003           Book        20
;WITH t AS (
    SELECT *
        , ROW_NUMBER() OVER (PARTITION BY [Item Name] 
                             ORDER BY [No.Transaction] DESC) As seq
    FROM yourTable)
SELECT t1.[Item Name]
    , t1.PRICE As lastPrice
    , t2.PRICE As preLastPrice
    , t1.PRICE - ISNULL(t2.PRICE, 0) As changePrice
FROM t t1
    LEFT JOIN
     t t2 ON t1.[Item Name] = t2.[Item Name] AND t1.seq = t2.seq - 1
WHERE (t1.seq = 1);

你所说的比较是什么意思?您使用的是什么版本的sql server;使用
其中res.[rank]<3
更好更快,并且
稠密\u rank()
可以对相同的两个或多个记录进行排序,请改用
行数()。SQL Server没有任何
limit()
函数;)。