mysql - 如何在 SQL 中返回具有特定分辨率(均匀分布)的数据集的记录
问题描述
我面对一个包含大量条目(约 1900 万)的数据库。在我的服务器上查询大约需要 20 秒并返回很多结果。但在前端(图表)中,我不需要每一行,所以我的想法是只返回结果行的 100 个元素。但不是前 100 个或后 100 个:这些行的 100 个均匀分布的元素。换句话说,我希望能够指定我的数据的分辨率。
这是一些伪代码。
SELECT time, type, value
FROM [table_name]
WHERE time >= [start_date] AND
time <= [end_date] AND
type = [any_type]
LIMIT 100 UNIFORMLY DISTRIBUTED OVER RESULTS;
您对如何为此编写查询有任何想法吗?这甚至可能吗?
解决方案
您可以按如下方式使用分析函数计数和行数(请根据您的数据库使用函数和语法):
Select * from
(SELECT time, type, value,
Row_number(1) over (order by time) as rn,
Count(1) over() as cnt
FROM [table_name]
WHERE time >= [start_date] AND
time <= [end_date] AND
type = [any_type]) t
Where mod(rn,trunc(cnt/100)) = 0
Order by time limit 100
推荐阅读
- ios - 在 iOS 15 模拟器 (SwiftUI) 上未调用 onOpenURL
- python - 如何在远程机器上复制和执行文件?
- asp.net-core-2.0 - 如何在 IIS 中获取 Windows 登录用户名定义匿名 + Windows 身份验证
- javascript - React - 当用户点击提交时显示模式,在点击模式按钮之前不要点击端点
- sql - laravel sql烛台查询
- python - 如何将包含其他列中值出现次数的列附加到现有数据框?
- react-native - Facebook 登录不起作用 Safari“URL 被阻止:此重定向失败,因为重定向 URI 未在应用程序的客户端 OAuth 设置中列入白名单。”
- npm - 本地机器上的 OroCommerce 安装问题
- flutter - Flutter 构建失败异常 java.lang.ClassNotFoundException: com.android.tools.lint.client.api.Vendor
- flutter - 如何调试这个 Flutter App Assertion 失败?