📅  最后修改于: 2023-12-03 15:05:17.385000             🧑  作者: Mango
LAG()
是一个SQL Server中的窗口函数,它用于获取一个指定行之前的数据。Windows函数在处理大数据集时非常有用。我们可以在一个表中获取一个指定行之前的值,或根据特定列或表达式定义一个操作符。
以下是使用LAG()
函数的语法:
LAG (scalar_expression [,offset] [,default])
OVER ( [ partition_by_clause ] order_by_clause )
假设我们有以下Sales
表:
| SalesDate | Product | Quantity |
|------------|----------|----------|
| 2021-05-01 | Apple | 10 |
| 2021-05-02 | Apple | 5 |
| 2021-05-03 | Apple | 7 |
| 2021-05-01 | Orange | 3 |
| 2021-05-02 | Orange | 4 |
| 2021-05-03 | Orange | 2 |
如果我们想要展示 sales 在每天的销量以及前一天的销量,我们可以通过以下查询实现:
SELECT SalesDate,
Product,
Quantity,
LAG(Quantity, 1) OVER (PARTITION BY Product ORDER BY SalesDate) AS LastDayQuantity
FROM Sales;
此查询将输出如下结果:
| SalesDate | Product | Quantity | LastDayQuantity |
|------------|----------|----------|-----------------|
| 2021-05-01 | Apple | 10 | NULL |
| 2021-05-02 | Apple | 5 | 10 |
| 2021-05-03 | Apple | 7 | 5 |
| 2021-05-01 | Orange | 3 | NULL |
| 2021-05-02 | Orange | 4 | 3 |
| 2021-05-03 | Orange | 2 | 4 |
在此查询中,我们在Quantity
列的旁边添加了另一列LastDayQuantity
。该列显示每个产品的上一天的销量。我们在OVER
子句中使用分区和排列子句来定义窗口大小,并按产品和销售日期对结果进行分组和排序。然后,我们使用LAG
函数通过指定(Quantity,1)
获取前一天的销量值,以便从当前行检索LastDayQuantity值。
使用LAG
函数,我们可以轻松地检索行上之前的值,在处理数据集时进行了简化。这个函数帮助我们计算two time-points之间的差异,分析one row 和previous row的数据变化,并绘制趋势行程。 这使其在分析每日或周期性数据时非常有用。