sql - PrestoDB 中给定用户每天获取 1 行数据
问题描述
对于特定客户,我们有大量行(数百万行),我只想在整个月内每天为客户的特定用户提取 1 行数据。这是一天的查询示例。
select update_date, name, city
from mydb.mytable
WHERE year = '2021' and month = '05' and dd = '01'
and customer_id = 'acme' and user_id = 'user123'
limit 1
如何在一个月的每一天执行此操作,以便使用 PrestDB 以最有效(最快)的方式为该客户/用户每天仅获得 1 行?
编辑:我应该补充一点,如果至少有 1 行,单日查询返回相当快,但如果在给定的一天没有该客户/用户的行,那么它必须查看所有行才能得到什么这需要很长时间。我认为除了索引之外什么都不会帮助解决这个问题,对吧?
解决方案
使用row_number()
:
select update_date, name, city
from (select t.*,
row_number() over (partition by user_id, year, month, day order by update_date desc) as seqnum
from mydb.mytable t
where year = '2021' and month = '05' and
user_id = 'user123' and customer_id = 'acme'
) t
where seqnum = 1;
推荐阅读
- android - 使用 KeyStore 进行 RSA 解密时出现间歇性 IllegalBlockSizeException
- reactjs - 无法处理从服务器获取的数据
- java - 具有 Azure 服务总线的 Java 应用程序
- c# - 1 == 0 返回真。为什么?
- android - 平板电脑的背景图像大小
- css - SCSS 在从不同文件夹导入时未正确传递相对图像引用
- java - Spring PersistanceContext,EntityManager 并使用您的数据库
- docker - 当 CNI 插件在容器级别工作时,kubernetes pod 如何获取 IP 而不是容器而不是它
- hive - 在 oozie 工作流程中忽略 .hql 中的错误
- html - 修复了即使 z-index=10000 也出现在 img 后面的导航栏