sql - 对存储过程的给定数据集进行分组
问题描述
我有一个包含示例数据的表格,如下所示:
systemuid filename mindatetime maxdatetime
10006 monitor_7.dat 2019-06-05 03:06:18.001 AM 2019-06-06 03:06:11.0 AM
72111 monitor_4.dat 2019-04-28 09:00:00 AM 2019-04-29 11:00:00 AM
10006 monitor_5.dat 2019-04-28 07:00:00 AM 2019-04-28 10:00:00 AM
90204 monitor_7.dat 2019-05-24 03:06:11.001 AM 2019-06-05 03:06:18.0 AM
90204 monitor_4.dat 2019-04-28 09:30:00 AM 2019-04-29 23:00:00 PM
72111 monitor_7.dat 2019-04-21 03:06:26.0 AM 2019-05-21 03:06:10.0 AM
10006 monitor_5.dat 2019-04-28 02:00:00 PM 2019-04-28 06:00:00 PM
72111 monitor_7.dat 2019-05-12 07:00:10.001 AM 2019-05-13 10:00:10.000 AM
90204 monitor_5.dat 2019-04-28 09:00:00 AM 2019-04-28 03:00:00 PM
10006 monitor_7.dat 2019-05-15 09:30:10.001 AM 2019-05-18 11:30:10.000 AM
72111 monitor_4.dat 2019-04-28 07:00:00 AM 2019-04-29 11:00:00 AM
10006 monitor_7.dat 2019-05-21 03:06:10.001 AM 2019-05-24 03:06:11.0 AM
我想通过将 systemuid 和文件名分组,然后按 mindatetime、maxdatetime 排序来组织数据。每个 systemuid 将有多个文件名,每个文件名都有多个时间戳。
systemuid filename mindatetime maxdatetime
10006 monitor_5.dat 2019-04-28 07:00:00 AM 2019-04-28 10:00:00 AM
10006 monitor_5.dat 2019-04-28 02:00:00 PM 2019-04-28 06:00:00 PM
10006 monitor_7.dat 2019-05-15 09:30:10.001 AM 2019-05-18 11:30:10.000 AM
10006 monitor_7.dat 2019-05-21 03:06:10.001 AM 2019-05-24 03:06:11.0 AM
10006 monitor_7.dat 2019-06-05 03:06:18.001 AM 2019-06-06 03:06:11.0 AM
72111 monitor_4.dat 2019-04-28 07:00:00 AM 2019-04-29 11:00:00 AM
72111 monitor_4.dat 2019-04-28 09:00:00 AM 2019-04-29 11:00:00 AM
72111 monitor_7.dat 2019-04-21 03:06:26.0 AM 2019-05-21 03:06:10.0 AM
72111 monitor_7.dat 2019-05-12 07:00:10.001 AM 2019-05-13 10:00:10.000 AM
90204 monitor_4.dat 2019-04-28 09:30:00 AM 2019-04-29 23:00:00 PM
90204 monitor_5.dat 2019-04-28 09:00:00 AM 2019-04-28 03:00:00 PM
90204 monitor_7.dat 2019-05-24 03:06:11.001 AM 2019-06-05 03:06:18.0 AM
我需要它作为我的存储过程的游标。因此需要数据采用这种格式才能对记录执行功能。表的大小非常大,有数百万条记录。
解决方案
只需使用窗口函数:
order by systemuid, filename, mindatetime, maxdatetime
如果您担心大型数据集的性能,请确保您在(systemuid, filename, mindatetime, maxdatetime)
.
无论您是否拥有索引,在数据库中进行排序可能比在应用程序中进行排序更快。
推荐阅读
- javascript - PHP AJAX 删除记录 - 只删除 1 次
- javascript - 如何从数据库中加载来自查询的数据以使所有标签都进入选择状态?
- julia - 在 python 上添加线性约束
- python - 正则表达式提取文本
- oracle - 如何使用 Azure Functions 连接到本地 Oracle-db?
- python-3.x - 如何通过 Dlib 将 mmod_rectangles 转换为矩形?
- node.js - Sequelize Association 获取 JSON 等数据
- scala - Scala 中的 PureConfig ConfigLoader
- vue.js - 如何将 gtag.js 与 nuxt.js 一起使用?
- php - PHP 项目从 windows 迁移到 linux(代码不工作)