sql - 以最有效的方式获得应用于条件的最小值
问题描述
我想选择具有相同 id 但有条件的记录的最小日期。例如,这些记录有多旧,我现在正在做的是将表连接到自身并应用 id 和所需条件,它工作但非常缓慢。
例如:我得到了 t1:
uid | 视频 | 创建日期 |
---|---|---|
1 | 2 | 2021-10-23 20:57:03.100 |
1 | 2 | 2021-10-23 21:02:22.700 |
1 | 2 | 2021-10-23 22:20:09.437 |
2 | 4 | 2021-10-23 10:58:05.447 |
2 | 4 | 2021-10-23 11:36:23.949 |
这是期望的结果,条件是具有相同 id 的日期之间的最大范围为半小时:(换句话说 - 我正在寻找最有效的方法来获得具有相同 id 的最小日期,该日期小于 date_created 列的一半最多小时。)
uid | 视频 | 创建日期 | 直流 |
---|---|---|---|
1 | 2 | 2021-10-23 20:57:03.100 | 2021-10-23 20:57:03.100 |
1 | 2 | 2021-10-23 21:02:22.700 | 2021-10-23 20:57:03.100 |
1 | 2 | 2021-10-23 22:20:09.437 | 2021-10-23 22:20:09.437 |
2 | 4 | 2021-10-23 10:58:05.447 | 2021-10-23 10:58:05.447 |
2 | 4 | 2021-10-23 11:36:23.949 | 2021-10-23 11:36:23.949 |
解决方案
对于您的特定条件“具有相同 id 的日期之间的最大范围为半小时”,您可以使用一个window
函数。你可以尝试这样的事情:
SELECT uid, vid, date_created
, first(date_created) over (partition by uid order by date_created range between '30 minutes' preceding and current row) as dc
FROM your_table
推荐阅读
- mysql - mySQL 将数字数据与同一表中的最后一个图像组合在一起
- javascript - 如何防止鼠标移动功能中弹出多个警报、确认或提示?
- macos - macOS 上的 Metal – 监视器刷新同步?
- python - 将大对象加载到一个文件中并将它们导入其他 Python 文件是一种好习惯吗?
- ejs - 我无法使用 nodejs 和 ejs 在数组中打印值
- mysql - 从一个表中返回不存在于另一个表中的值
- angular - 使用 Angular 6 和 .net core mvc 进行报告
- jenkins-plugins - Zap 导出报告在 Jenkins 中不起作用
- firebase - 在 Firebase 中请求用户权限是强制性的吗?
- java - Java中的多种字体