PrestoDB 中给定用户每天获取 1 行数据

Get 1 row of data per day for a given user in PrestoDB

我们有一个特定客户的大量行(数以百万计),我只想在整个月内每天为该客户的特定用户提取 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 以最有效(最快)的方式每天只获得一行 customer/user?

编辑:我应该补充一点,如果至少有 1 行,单日查询 returns 相当快,但是如果给定的一天 customer/user 没有行,那么它必须查看所有行以一无所获,这需要很长时间。我认为除了索引之外没有其他方法可以帮助解决这个问题,对吗?

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