sql:获取每个用户每天的最新记录

vnjpjtjt  于 2021-08-13  发布在  Java
关注(0)|答案(3)|浏览(457)

我有一个table

user_id behavior time
A B1 2020-05-30 09:07:21
A B1 2020-05-31 12:38:21
A B2 2020-05-31 14:39:23
B B1 2020-05-31 12:32:09

我想得到每个用户每天的最新记录,所以上表会变成

user_id behavior time
    A B1 2020-05-30 09:07:21
    A B2 2020-05-31 14:39:23
    B B1 2020-05-31 12:32:09

我看了stackoverflow中的一些其他问题,但没有找到我要找的确切内容。
谢谢你的帮助。

ig9co6j1

ig9co6j11#

你可以试试 row_number() ,必须按 user_id , behavior 以及 date .

select
    user_id,
    behavior,
    time
from
(
    select
        *,
        row_number() over (partition by user_id, behavior, to_date(time) order by time desc) as rnk
    from yourTable
) val
where rnk = 1

输出:

| user_id | behavior | time                     |
| ------- | -------- | ------------------------ |
| A       | B1       | 2020-05-30 09:07:21      |
| A       | B2       | 2020-05-31 14:39:23      |
| B       | B1       | 2020-05-31 12:32:09      |
p5fdfcr1

p5fdfcr12#

请使用下面的查询,可以使用简单的min()函数,

select user_id, behaviour, min(time) group by user_id, behaviour;
wswtfjt7

wswtfjt73#

你的问题不清楚,但你可以用 qualify 不管怎样。如果你想要最后一次 user_id / behavior ,然后:

select t.*
from t
qualify row_number() over (partition by user_id, behavior order by time desc) = 1;

如果希望每个用户最近一天的最后一行,则:

select t.*
from t
qualify dense_rank() over (partition by user_id order by date(time) desc) = 1;
``` `qualify` 你喜欢过滤吗 `where` 以及 `having` . 但是,它允许使用窗口函数。

相关问题