问题 运行 雪花 sql 中的最大函数和排序依据

Issues running Max function and Order by in snowflake sql

我是 snowflake 的新手,我正在尝试 运行 一个 sql 查询,该查询将为每个 ID 提取最大日期时间。以下是我的数据示例

Table 姓名:final_extract

id datetime ip
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

我想达到的目标

id datetime ip
111 2022-02-03 11:37:58:000 62.44.134.97
222 2021-02-03 11:37:58:000 88.44.134.96

下面的代码似乎没有达到我想要的效果。

select "id", MAX("datetime") As LastLoginDateTime, "ip "
from final_extract
group by "id ","ip "
order by MAX("datetime") DESC
limit 10

您的查询不起作用,因为每一行都有不同的 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 option works very nicely, and using 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

因此为您 table 和专栏:

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

比较简洁。