sql - 在 SQL 中查找发生变化的行,但仅保留某些更改,同时保留其他更改
问题描述
我有这种情况,我希望每次出现的活动行都在我的结果集中恢复该行,并且如果该 IDENTIFIER 只有 1 个不活动记录并且如果有超过 1 个活动记录也显示这些记录。我使用了 Row_Number 函数,然后在另一个查询中显示 row = '1' 但如果我这样做,第 1 行只会回来,然后我会丢失一些我想要的结果。重申我的问题是我希望所有活动记录都回来,并且只有在 IDENTIFIER 唯一的情况下才处于非活动状态。粗体的行不应显示在结果中。
1 在数据库中有 1 条活动记录。
2 有 2 条活动记录和 1 条非活动记录。
3 没有活动记录。
4 只有 2 条活动记录,没有非活动记录。
解决方案
您可以使用窗口条件计数,这样做的好处是只扫描表一次
SELECT
t.IDENTIFIER,
t.DB_ID,
t.Status
FROM (
SELECT *,
HasActive = COUNT(CASE WHEN t.Status = 'Active' THEN 1 END) OVER (PARTITION BY t.IDENTIFIER)
FROM YourTable t
) t
WHERE t.Status = 'Active' OR t.HasActive = 0;
推荐阅读
- php - Soap 响应不是 XML 而是字符串
- rabbitmq - Spring AMQP RabbitMQ RPC - 与一些不期望响应的消息一起排队
- javascript - 应用程序首次加载时 React Native 中的全局状态
- visual-studio-code - vscode 在最新的 Flutter 版本上无法 HotReload
- javascript - 在 JavaScript 中下载存储数据
- javascript - 使用 Truffle 测试 Solidity 合约中的事件
- excel - 我想用用户的输入改变一个 Excel 列
- android - 长时间未使用后以编程方式添加的视图不会改变可见性
- html - CSS网格和内联块设计问题
- windows - 欺骗子进程认为它正在写入终端