在snowflake sql中运行Max函数和Order by时出现问题



我是雪花的新手,我正在尝试运行一个sql查询,该查询将提取每个ID的最大Datetime。以下是我的数据示例

表名:final_extract

日期时间1112022-02-03 11:37:58:00062.44.134.972222021-02-03 11:37:58:000>88.44.134.961112022-02-01 11:37:58:0002.44.134.97//tr>1112021-02-03 11:37:58:00069.44.134.97

您的查询不起作用,因为每行都有不同的ip,您必须决定选择哪个。检查一下,我从ip:中选择最后一个值

SELECT DISTINCT id
, MAX(datetime) OVER(PARTITION BY id) As LastLoginDateTime
, LAST_VALUE(ip) OVER(PARTITION BY id ORDER BY datetime) AS ip
FROM final_extract
ORDER BY LastLoginDateTime DESC
LIMIT 10; 

Michael的回答很好,但如果你有很多行,并且希望选择一些rowa并排除其余的,那么QUALIFY选项非常有效,并且使用ROW_NUMBER来选择每组的首选行。

SELECT *
FROM VALUES 
(111, '2022-02-03 11:37:58:000', '62.44.134.97'),
(222, '2021-02-03 11:37:58:000', '88.44.134.96'),
(111, '2022-02-01 11:37:58:000', '22.44.134.97'),
(111, '2021-02-03 11:37:58:000', '69.44.134.97')
v(id, datetime, ip_address)
QUALIFY row_number() over(partition by id order by datetime desc) = 1

因此,对于您的表和列:

select id, datetime AS lastlogindatetime, "ip "
from final_extract
QUALIFY row_number() over ( partition by id order by datetime desc) = 1
order by 2 DESC
limit 10

相当简洁。

最新更新