SQL - 如何显示多行结果之间的差异

标签 sql sql-server sql-server-2012 sliding-window

我有一个 SQL 2012 查询,它给了我以下结果:

IP_Country  ds          Percentage
-------------------------------------
Australia   01/01/2013  0.70155
Australia   02/01/2013  0.685
Australia   03/01/2013  0.663594
Australia   04/01/2013  0.737541
Australia   05/01/2013  0.688212
Australia   06/01/2013  0.665384
Australia   07/01/2013  0.620253
Australia   08/01/2013  0.697183

结果继续显示相同日期和不同百分比的不同国家/地区。

我需要展示的是,这些百分比在同一国家/地区的日期之间的变化。

所以在 02/01 和 01/01 之间的差异是 0.02 - 我可以提取数据并在 excel 中执行此操作,但理想情况下我希望结果随着查询中的移动而出现。

最佳答案

您可以使用 LAGLEAD访问上一行和下一行。

SELECT *,
        LAG([Percentage]) OVER (PARTITION BY [IP_Country] ORDER BY [ds]) 
                                                               - [Percentage] AS diff,
       ([Percentage] - LEAD([Percentage]) OVER (PARTITION BY [IP_Country] ORDER BY [ds])) 
                                                             / [Percentage] AS [ratio]
FROM  YourTable  

SQL Fiddle

关于SQL - 如何显示多行结果之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14729576/

相关文章:

php - 如何在 MySQL 列类型 varchar(1000) 中正确写入文本?

java - 用于替换符号的正则表达式

sql - 如果值不存在则返回 null

sql - 用固定值覆盖 select 语句中的一列而不列出所有列

sql-server - SQL Server 2012 不工作时的情况

sql - 如何根据最大日期获取不同的记录?

sql - 两个不同的查询作为一个结果在 oracle SQL 中的输出

java - 内存不足错误: Failed to allocate a 82956 byte allocation with 30836 free bytes and 30KB until OOM?

sql-server - T-SQL中 "::"的用途是什么

sql-server - SQL Server 2012 CPU 使用率飙升至 100%