在雪花中使用 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
。
我是 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
。