sql - 检查单调递增值的行
问题描述
我正在寻找一种方法来检查表中的值对于特定的行子集是否单调增加。该表包含列 id、name、meas_date 和 value。对于所有同名的行,这些行应该按 meas_date 排序,并且需要检查这些排序行的 value 列是否单调递增。因此,如果具有 id 的行破坏了 monotoy,我需要 id 和一个标志,否则为 0。示例数据可能是:
id name meas_date value
1 name1 2018/01/01 1
2 name1 2018/01/02 2
3 name2 2018/01/04 2
4 name1 2018/01/03 1
5 name1 2018/01/04 5
6 name2 2018/01/05 4
7 name2 2018/01/06 2
8 name1 2018/01/05 2
期望的结果:
id flag
1 0
2 0
3 0
4 1
5 0
6 0
7 1
8 1
如果可能,计算结果时无需任何 PL/SQL,只需纯 SQL。
我想我需要某种表与自身的内部连接,通过排序子集的行号连接,其中每个子集代表名称列的一个可能值。在连接表中,我需要计算每一行的值列与其前任之间的差异,如果差异为零或以下,这需要导致 flag=1。
我正在使用 Oracle 11g。
非常感谢,
基督教
解决方案
如果您的 Oracle 版本支持,LAG
那么有一个简单的选择:
SELECT
id,
CASE WHEN value >= LAG(value, 1, value) OVER (PARTITION BY name ORDER BY meas_date)
THEN 0 ELSE 1 END AS flag
FROM yourTable
推荐阅读
- encryption - 使用 iv 和 PKCS7Padding 加密字符串解密 AES 256 CBC(使用 Java 加密)
- c# - (如何)我可以试用新的 C# 9.0 语言功能吗?
- python - Tkinter - 为什么我的所有 Checkbuttons 的状态都链接在一个循环中?
- php - 如何每次在 iframe 中加载 html 页面而不在浏览器上存储或缓存
- r - 如何根据原始索引合并两个向量?
- javascript - 防止多个 BrowserWindow 打开电子
- node.js - 使用令牌(JWT?)管理安全请求
- javascript - 遍历图像集合 Google Earth Enigne
- machine-learning - 将 YOLO 与 vgg 分类器连接
- java - MyBatis 映射器使用反射插入注释