SQL-基于两列忽略/删除重复项
假设我有一个单表操作,如下所示: 我正在尝试编写一个查询,根据MAXepoch为id和rdate列中具有相同值的记录提供单击次数-最终结果应该是:注意,我不需要结果中的epoch列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 | +----+--------
+----+------------+--------+
| 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。这是最好的解决方案,应该是公认的答案。