sql - 检查数字是否在算术级数中
问题描述
我有一个表,其中有一列 Order,Order 列总是按 10 的顺序增加,即 10,20,30,40 ..... 在同一个 parentId 下
即父 1 的订单列是 10,20,30,40 父 2 的订单列可以是 10,20
我所知道的是我必须使用一个运行类似于 n(R1+Rn)/2 https://www.tiger-algebra.com/drill/10,20,30,40,50,60,70 的逻辑, 80,90,100/
数据库结构如https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=9557181f0c559131fa25bc5918b84bd4中解释的那样 可以有多个 DocumentId 每个 documentId 包含一堆 DocumentData
这里 DocumentDataId 是 pk,一个 Parent Id 是一个自引用的 fk。
我要检查的是确保订单始终按顺序排列,即 10、20、30、40 并且没有重复或像 10、20、20、40 这样的空白我将如何在 SQL Server 中运行它?
解决方案
您可以使用窗口函数:
-- incorrect values
WITH cte AS (
SELECT *,
FIRST_VALUE(OrderColumn) OVER(PARTITION BY Parent ORDER BY OrderColumn) +
10*(ROW_NUMBER() OVER(PARTITION BY Parent ORDER BY OrderColumn)-1) AS progression
FROM tab
)
SELECT *
FROM cte
WHERE progression != OrderColumn;
-- correct
WITH cte AS (
SELECT *,
FIRST_VALUE(OrderColumn) OVER(PARTITION BY Parent ORDER BY OrderColumn) +
10*(ROW_NUMBER() OVER(PARTITION BY Parent ORDER BY OrderColumn)-1) AS progression
FROM tab
)
SELECT Parent
FROM cte
EXCEPT
SELECT Parent
FROM cte
WHERE progression != OrderColumn
GROUP BY Parent;
推荐阅读
- javascript - 区分 JavaScript Try/Catch 中的 API (Apex) 异常类型
- powershell - 如何在 VSCode 中设置自定义 powershell 安装目录
- python - 无法加载使用 Igor pro 保存的 Python hdf 文件
- sql - 处理模型表中 expires_in 数据的最佳方法是什么
- javascript - 在 Discord.js V13 中发送贴纸
- javascript - React 表单返回未定义的值
- arrays - C for 循环中未声明的标识符错误?
- javascript - 从 Mongoose 获取项目列表并返回结果
- apache-spark - Spark中的嵌套groupBy和agg
- adfs - ADFS 2019 在从客户端返回的令牌中包含角色