栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在多个参数和条件下检测SQL孤岛

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在多个参数和条件下检测SQL孤岛

回答更新的问题

SELECt *FROM  (   SELECt *         ,lag(val, 1, 0) OVER (PARTITION BY status ORDER BY id) last_val         ,lag(status) OVER (PARTITION BY val ORDER BY id) last_status   FROM   t1   ) xWHERe  status = 1AND    (last_val <> val OR last_status = 0)

如何?

与以前相同,但是这次结合了两个窗口功能。打开设备是否符合以下条件:
1.最后打开的设备是否与其他设备 不同
2.或同一设备的最后一个条目已 关闭

NULL
分区的第一行与的大写字母无关紧要,因为那么该行已经在 1中 限定了


回答问题的原始版本。

如果您正确地理解了您的任务,则可以通过以下简单查询完成任务:

SELECt *FROM  (   SELECt *         ,lag(val, 1, 0) OVER (ORDER BY id) last_on   FROM   t1   WHERe  status = 1   ) xWHERe  last_on <> val

根据要求返回第1、3、6、7行。

如何?

根据您的描述,子查询将忽略所有关闭操作,因为这仅仅是噪音。将条目保留在打开设备的位置。其中,只有那些条目已被取消资格,而同一设备已经处于打开状态(最后一个条目处于打开状态)。为此使用窗口功能

lag()
。特别是,我
0
默认提供第一行的特殊情况-假设没有带的设备
val = 0

如果有,请选择另一个不可能的数字。
如果没有数字是不可能的,则保留和一样的特殊情况
NULL
lag(val) OVER ...
并在外部查询中检查与:

WHERe last_on IS DISTINCT FROM val


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/495310.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号