如何从满足特定条件的行中获取连续的日期间隔?
我有一个包含 2 种user_position的员工状态表。 如果每user_id下一个较高的date_position具有相同的user_id、第二天的值和user_position没有变化,则间隔是连续的。用户在一天内不能有不同的用户位置。
感觉它需要几种情况,窗口函数和tsrange,但不能完全得到正确的结果。
如果您能帮助我,我将不胜感激。
小提琴:
http://sqlfiddle.com/#!17/ba641/1/0
结果应如下所示:
user_position | position_start | position_end |
---|
1 | 01.01.2019 | 02.01.2019 |
2 | 03.01.2019 | 04.01.2019 |
1 | 05.01.2019 | 06.01.2019 |
1 | 01.01.2019 | 2019.03.01 |
2 | 04.01.2019 | 05.01.2019 |
2 | 08.01.2019 | 08.01.2019 |
2 | 10.01.2019 | 2019.10.01 |
SELECT user_id, user_position
, min(date_position) AS position_start
, max(date_position) AS position_end
FROM (
SELECT user_id, user_position,date_position
, count(*) FILTER (WHERE (date_position = last_date + 1
AND user_position = last_pos) IS NOT TRUE)
OVER (PARTITION BY user_id ORDER BY date_position) AS interval
FROM (
SELECT user_id, user_position, date_position
, lag(date_position) OVER w AS last_date
, lag(user_position) OVER w AS last_pos
FROM users_position
WINDOW w AS (PARTITION BY user_id ORDER BY date_position)
) sub1
) sub2
GROUP BY user_id, user_position, interval
ORDER BY user_id, interval;
db<>小提琴在这里
基本上,这通过计算连续性中的中断次数来形成间隔。每当每个user_id
的"下一个"行不是预期的时,就会开始一个新的间隔。
WINDOW
子句允许指定一次窗口框架并重复使用;对性能没有影响。
last_date + 1
工作,而last_date
是类型date
.看:
- 有没有办法对 DATE 类型的值进行日期算术,而结果不是 TIMESTAMP 类型?
相关:
- 根据行序列获取开始和结束日期时间
- 选择最长的连续序列
关于聚合FILTER
:
- 使用其他(非重复)筛选器聚合列
相关内容
- 没有找到相关文章
最新更新
- 将每小时ERA5 netcdf文件合并为每日文件
- 打字脚本"TS2339:属性'X'在类型'Y'"错误中不存在,即使定义了类型
- 尝试添加背景音乐到web应用程序
- 构建错误.在scala框架中使用PlayScala
- Ruby on Rails -从数组中获取前n个元素
- 没有更多的数据!现在,刮痧将会停止.不能使用twint获取更多tweets
- 为什么我不能在空对象上调用方法view()
- Python类和协议的多重继承
- 正在写IIS重定向规则
- .net5程序的w3wp进程的非托管内存泄漏,内存占用在哪里?
- TypeError: _getfullpathname:路径应该是字符串、字节或os.PathLike,而不是list
- 如何在typescript中设置React Native中的全局变量?
- Mac上已安装但未被IDLE识别
- 包含相同站点参数的PHP setcookie函数不起作用
- 如何修改Dart中的"打印"功能?
- 在Oauth应用程序中,如何从express服务器传递访问令牌到react应用程序?
- <a> 在按钮提交时打开选定的标签链接?
- 具有重复图像作为装饰的水平可滚动容器
- 错误:宏"断言"传递了 2 个参数,但只占用 1 个参数
- 如何检测Android设备在其浏览器中访问的链接并将url发送到另一个应用程序?
- #SET TERMINATOR语句的目的是什么?
- 类型错误:只能将 str(不是"字节")连接到套接字模块中的 str
- react-router-dom:如何用某种模式匹配url
- 为什么将单个字节类型转换为字符串在go中不起作用?
- 如何在MySql中返回不同的列而不是标准列?查询
- Listener Facebook Login in Supabase Flutter
- Javascript添加类到多个元素,除了一个
- 在windows上使用R导入xkcd字体(适用于xkcd包)
- 如何在用户输入不正确的值后使python循环程序?
- <picture> 元素在媒体查询/属性之间闪烁到 100% 宽度
热门标签:
javascript python java c# php android html jquery c++ css ios sql mysql arrays asp.net json python-3.x ruby-on-rails .net sql-server django objective-c excel regex ruby linux ajax iphone xml vba spring asp.net-mvc database wordpress string postgresql wpf windows xcode bash git oracle list vb.net multithreading eclipse algorithm macos powershell visual-studio image forms numpy scala function api selenium