sql - 识别过去最后的有效状态
问题描述
我想确定有关特定月份的变量的最后状态。例如
Variable Date Operation State
A 01Jan2019 1 10
A 10Jan2019 3 20
A 31Jan2019 4 50
A 05Feb2019 7 60
A 22Feb2019 8 70
B 06Jan2019 2 10
B 07Jan2019 3 20
B 07Feb2019 6 60
B 15Mar2019 9 80
结果应该像
Variable Month Year Last_State_Until_End_of_Month
A 1 2019 50
A 2 2019 70
A 3 2019 70
B 1 2019 20
B 2 2019 60
B 3 2019 80
请注意,变量 A 在三月的最后一个状态与二月的相同。(3 月期间未进行任何更改)。我不知道它是否有帮助,但是有一个操作 ID 会随着状态的每次变化而增加,而与变量的选择无关。
解决方案
感谢 Panagiotis Kanavos,以下查询有效:
declare @table_test TABLE (variable_name nvarchar(255), date_var date, op_id int, state int)
insert into @table_test Values
('A', '01Jan2019', 1 ,10),
('A', '10Jan2019', 3 ,20),
('A', '31Jan2019', 4 ,50),
('A', '05Feb2019', 7 ,60),
('A', '22Feb2019', 8 ,70),
('B', '06Jan2019', 2 ,10),
('B', '07Jan2019', 3 ,20),
('B', '07Feb2019', 6 ,60),
('B', '15Mar2019', 9 ,80)
select
year(date_var) as year
,month(date_var) as month
,variable_name,
,Last_value(State) OVER (partition by year(date_var),month(date_var),variable_name order by date_var ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) as last_value
from @table_test
Order by variable_name, year(date_var),month(date_var)
此查询返回:
year month variable_name last_value
2019 1 A 50
2019 1 A 50
2019 1 A 50
2019 2 A 70
2019 2 A 70
2019 1 B 20
2019 1 B 20
2019 2 B 60
2019 3 B 80
推荐阅读
- ios - 每次我拨打电话时,JSON api网络调用都没有返回可靠数量的数据(Swift)
- javascript - 在 Node.js 中连接到 mongoDB 时出错,“mongoose.connect() 的第一个参数是一个字符串。”
- r - R:根据列中的值合并两个数据框并返回两个数据框的所有值
- vue.js - DDD 模型中的域与 Vuex 操作
- c# - 不可调用的成员“OperationResult”不能像方法一样使用
- powerbi - 用基于另一列的值替换列中的空白
- php - PHP 如何使用 Web 控制器将 excel 文件 xlsx 或其他文件导入数据库
- c++ - 单元化局部变量 + 使用单元化内存
- azure-sql-database - 气流 - sql_alchemy_conn(Azure SQL 数据库)
- r - 闪亮 R 中的数据分区