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;
我们有一个特定客户的大量行(数以百万计),我只想在整个月内每天为该客户的特定用户提取 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;