SQL-基于两列忽略/删除重复项

SQL-基于两列忽略/删除重复项,sql,snowflake-cloud-data-platform,Sql,Snowflake Cloud Data Platform,假设我有一个单表操作,如下所示: 我正在尝试编写一个查询,根据MAXepoch为id和rdate列中具有相同值的记录提供单击次数-最终结果应该是:注意,我不需要结果中的epoch列 +----+------------+--------+ | id | date | clicks | +----+------------+--------+ | 1 | 2020-01-01 | 100 | | 1 | 2020-10-12 | 42 | +----+--------

假设我有一个单表操作,如下所示:

我正在尝试编写一个查询,根据MAXepoch为id和rdate列中具有相同值的记录提供单击次数-最终结果应该是:注意,我不需要结果中的epoch列

+----+------------+--------+
| id |    date    | clicks |
+----+------------+--------+
|  1 | 2020-01-01 |    100 |
|  1 | 2020-10-12 |     42 |
+----+------------+--------+
我尝试了以下查询,但结果中仍然存在重复项。GROUPBY查询在自身运行时确实会删除重复项,但用于获取单击的内部联接无法按预期工作

选择 身份证件 拉迪特, 咔哒声 从行动a 内连接 选择 身份证件 拉迪特, 大纪元 从行动 分组 身份证件 rdate B 在a.id=b.id上 a.rdate=b.rdate; 我建议在此处使用行号:

以cte为例 选择*,按id划分的行数,按纪元描述的日期顺序 从行动 选择id、rdate、单击、历元 来自cte 其中rn=1; 如果要坚持使用当前的联接方法,则需要修复逻辑,以便对子查询的联接也会限制单击次数:

选择a1* 来自行动a1 内连接 选择id、rdate、MAXepoch作为最大历元 从行动 按id分组,rdate a2 在a2.id=a1.id和a2.rdate=a1.rdate和a2.max_epoch=a1.epoch上; 我建议在此处使用行号:

以cte为例 选择*,按id划分的行数,按纪元描述的日期顺序 从行动 选择id、rdate、单击、历元 来自cte 其中rn=1; 如果要坚持使用当前的联接方法,则需要修复逻辑,以便对子查询的联接也会限制单击次数:

选择a1* 来自行动a1 内连接 选择id、rdate、MAXepoch作为最大历元 从行动 按id分组,rdate a2 在a2.id=a1.id和a2.rdate=a1.rdate和a2.max_epoch=a1.epoch上; 您可以使用和窗口化功能:

SELECT *
FROM actions
QUALIFY ROW_NUMBER() OVER(PARTITION BY id, rdate ORDER BY epoch DESC) = 1
您可以使用和窗口化功能:

SELECT *
FROM actions
QUALIFY ROW_NUMBER() OVER(PARTITION BY id, rdate ORDER BY epoch DESC) = 1

@丹尼尔。这是最好的解决方案,应该是公认的答案。@Daniel。这是最好的解决方案,应该是公认的答案。