sql - 在 SQL Server 中通过列更改进行排名
问题描述
下面是我想根据每个产品的 Install_Status 和 Dates 列更改来排名的原始表。
询问:
;WITH CTE AS
(
SELECT
Product, Install_Status, Date_Inserted,
DENSE_RANK() OVER (PARTITION BY Product ORDER BY rank) rank
FROM
(SELECT
Product, Install_Status, Date_Inserted,
ROW_NUMBER() OVER (ORDER BY Product, Date_Inserted) -
ROW_NUMBER() OVER (PARTITION BY Product, Install_Status ORDER BY Product, Date_Inserted ASC) AS rank
FROM
[dbo].[Product_table]) t
)
SELECT *
FROM CTE
ORDER BY Product, Date_Inserted;
此 SQL 查询返回以下结果:
但是,我没有按日期获得产品 A 的适当排名。我的预期结果如下:
解决方案
你似乎想计算变化。对于此用途lag()
和累积总和:
select t.*,
sum(case when prev_install_status = install_status then 0 else 1 end) over
(partition by product order by date_inserted) as rank
from (select t.*,
lag(install_status) over (partition by product order by date_inserted) as prev_install_status
from t
) t;
推荐阅读
- vue.js - 获取所有输入值 - Vuejs
- ruby - iTerm2 设置为登录 Shell,RVM 仍然报错
- linux - 如何在子进程中正确接收来自键盘的标准输入?
- c# - C# Telnet 客户端不提供/不完整的输出
- c# - 设置要求 SSL=true Asp.net 时出错
- spring - 当我尝试使用 2 个集合加载实体时,MultipleBagFetchException 使用 JPA EntityGraph
- python - 使用 python 启动/停止 Azure Function App
- c# - jquery文件未在mvc应用程序的边缘加载
- r - H2O xgboost mojo 预测警告
- php - 如何使用 php 和 mysqli 在 html 页面中的数据库中的框中显示用户帐户图片和名称?