在雪花中使用 Max 函数和 orderby 的问题

Issues using Max function and orderby in snowflake

我是 snowflake 的新手,我正在尝试 运行 一些 sql 查询来提取最新日期及其相关的 ip

table 姓名:lex

id date ip
001 2022-01-14 15:03:43.000 5.3.3.46.173
001 2021-01-14 15:03:43.000 9.3.3.26.193
002 2022-01-14 15:03:43.000 null
001 2021-01-13 15:03:43.000 4.3.9.46.173
002 2022-01-10 15:03:43.000 8.1.3.26.122
003 2022-01-14 15:03:43.000 7.3.3.66.177

我想要达到的目标

id date ip
001 2022-01-14 15:03:43.000 5.3.3.46.173
002 2022-01-14 15:03:43.000 null
003 2022-01-14 15:03:43.000 7.3.3.66.177

到目前为止我做了什么

Select id,
       date,
       ip
From lex
where date = (Select Max(date) from lex)

此代码只给出一行而不是三行

我以为“最近”是由 date-column 定义的,但事实并非如此。 “最新”在您的情况下是按行顺序定义的,不是吗?例如,对于 ID 001,前两条记录的 date-column 相同,您只需选择第一个出现的记录。

如果是这种情况,则无法根据上述输入 table 使用 SQL 确定性地求解。将检索结果集并且结果集没有顺序(除非应用了顺序)。

我的建议:添加一个新的SQL列,显示准确的插入日期时间戳,然后就可以解决了。

假设该值是错字,那么请尝试:

select * from lex a
where date = (select max(date) from lex b where a.ip = b.ip)

使用QUALIFY

SELECT *
FROM lex
QUALIFY ROW_NUMBER() OVER(PARTITION BY id ORDER BY date DESC) = 1;

如果每个 ID 可能同时有多个行,则应使用 RANK