首页 > 解决方案 > 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 行,单日查询返回相当快,但如果在给定的一天没有该客户/用户的行,那么它必须查看所有行才能得到什么这需要很长时间。我认为除了索引之外什么都不会帮助解决这个问题,对吧?

标签: sqlprestotrino

解决方案


使用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;

推荐阅读