sql-server - 比较两列与 SQL 匹配的行的差异
问题描述
我正在尝试比较当前 [日期] 与上一个 [日期] 的每个 [名称] 的 [销售额] 差异
这就是我得到的:
姓名 | 日期 | 销售量 |
---|---|---|
安娜 | 12/15 | 100 |
约瑟夫 | 12/15 | 150 |
卡尔 | 12/15 | 50 |
安娜 | 12/14 | 20 |
约瑟夫 | 12/14 | 50 |
卡尔 | 12/14 | 200 |
安娜 | 12/13 | 50 |
约瑟夫 | 12/13 | 300 |
卡尔 | 12/13 | 100 |
这是我正在寻找的输出:
姓名 | 日期 | 销售量 | 区别 |
---|---|---|---|
安娜 | 12/15 | 100 | 80 |
约瑟夫 | 12/15 | 150 | 100 |
卡尔 | 12/15 | 50 | -150 |
安娜 | 12/14 | 20 | -30 |
约瑟夫 | 12/14 | 50 | -250 |
卡尔 | 12/14 | 200 | 100 |
安娜 | 12/13 | 50 | 0 |
约瑟夫 | 12/13 | 300 | 0 |
卡尔 | 12/13 | 100 | 0 |
我是 SQL 服务器的新手,我认为我需要使用 CASE 语句,感谢帮助!
解决方案
您在这里想要的是在 上进行LAG
分区name
,并定义了默认值(这是第三个参数)。我还假设您的专栏date
是一个date
(因为有这样的名称,为什么不是),尽管您的示例数据表明它不是(如果不是,则需要修复):
SELECT name,
date,
sales,
sales - LAG(sales,1,sales) OVER (PARTITION BY name ORDER BY date ASC) as difference
FROM (VALUES('ana ',CONVERT(date,'2/15/2020',101), 100),
('Joseph ',CONVERT(date,'2/15/2020',101), 150),
('Carl ',CONVERT(date,'2/15/2020',101), 50),
('ana ',CONVERT(date,'2/14/2020',101), 20),
('Joseph ',CONVERT(date,'2/14/2020',101), 50),
('Carl ',CONVERT(date,'2/14/2020',101), 200),
('ana ',CONVERT(date,'2/13/2020',101), 50),
('Joseph ',CONVERT(date,'2/13/2020',101), 300),
('Carl ',CONVERT(date,'2/13/2020',101), 100))YourTable(name,date,sales)
ORDER BY date DESC,
name ASC;
推荐阅读
- c# - 在 Linq 中选择包含其他对象列表的新对象
- javascript - .toFixed 函数不适用于 js-object
- c# - 使用管理员权限和权限从 C# 执行 Powershell 脚本
- python - 在 python 中从 JSON 字典中搜索并获取值
- ios - UITextView 中的文本更改事件
- sqlite - 查询运行了几天
- scikit-learn - 如何从应用于多类问题的 LogisticRegressionCV 的输出中选择 C
- python - 无法在 Django 中导入名称“登录”
- android - 委托适配器不重用 ViewHolders
- javascript - nvd3 相同时间戳的正负值