如何使用group by和order by获得列字段的两个连续行之间的差异

时间:2018-11-07 20:00:13

标签: sql

EmpNo部门销售 1 10 9 2 20 7 1 10 10 1 10 5 3 10 3 3 10 8 1 10 11 4 30 5 4 30 5

EmpNo部门的销售增长 1 10 5 5 1 10 9 4 1 10 10 1 1 10 11 1 3 10 3 3 3 10 8 5 2 20 7 7 4 30 5 5 4 30 6 1

1 个答案:

答案 0 :(得分:0)

您可以使用LAG来获取雇员划分的最后一个值,但是您需要一个附加列(例如ID或日期)来对这些列进行排序。这是一个简单的示例,仅包含示例的前几条记录(添加id列):

SELECT *,
    Sales - LAG(Sales, 1, 0) OVER (PARTITION BY EmpNo ORDER BY Id) AS Growth
FROM SalesData

带有示例数据

;WITH SalesData (Id, EmpNo, Dept, Sales) AS (
    SELECT 1, 1, 10, 9
    UNION ALL SELECT 2, 1,10, 10
    UNION ALL SELECT 3, 2, 10, 7
)
    SELECT *,
        Sales - LAG(Sales, 1, 0) OVER (PARTITION BY EmpNo ORDER BY Id) AS Growth
    FROM SalesData

此示例产生:

Id          EmpNo       Dept        Sales       Growth
----------- ----------- ----------- ----------- -----------
1           1           10          9           9
2           1           10          10          1
3           2           10          7           7