找文章 / 找答案
  • 发帖数29
  • 粉丝0

此人很懒,什么也没有留下

  • 初级考试达人

    通过永洪BI工程师认证初级考试的学霸
精选问答 更多内容

[AI分析] 如何删除重复的数据谢谢!

kevin2021青铜三 显示全部楼层 发表于 2021-12-13 20:18:38 |阅读模式 打印 上一主题 下一主题
1
已解决

【AI分析】 如何删除重复的数据谢谢!

4030 9
如何根据表的主键字段,删除重复的数据,只保留一条最新的数据?谢谢!

最佳答案

永洪vip
yhdata_lyaa 关注Ta

2021-12-13 20:18:39

您是想在数据库的时候就先去重吗,使用相关的SQL语句,按照单一条件进行去重; 如果在查询时,可以使用SELECT DISTINCT 用来查询不重复记录的条数 如果有自服务数据集可以先把数据查询出来,再使用自服务数据集去重功能 (自服务数据集是需要单独付费)
查看完整内容
回复

使用道具 举报

精彩评论9

yhdata_lyaa 显示全部楼层 发表于 2021-12-13 20:18:39
您是想在数据库的时候就先去重吗,使用相关的SQL语句,按照单一条件进行去重;
如果在查询时,可以使用SELECT DISTINCT 用来查询不重复记录的条数
如果有自服务数据集可以先把数据查询出来,再使用自服务数据集去重功能 (自服务数据集是需要单独付费)
回复

使用道具 举报

kevin2021青铜三 显示全部楼层 发表于 2021-12-14 09:36:45
本帖最后由 kevin2021 于 2021-12-14 09:42 编辑

SELECT DISTINCT是不行的,因为重复数据的来自两次更新的内容。比如第一天抽取了某个订单的交易记录,第二天该订单有新的交易记录又抽取了一次,这样这个订单就有2条数据了。我试下自服务数据集的去重功能
回复

使用道具 举报

kevin2021青铜三 显示全部楼层 发表于 2021-12-14 14:36:25
自服务数据集的去重功能不符合需求............这个去重功能只会删除完全相同的数据,我的场景只是主关键字是相同的
回复

使用道具 举报

切莫意气用事青铜三 显示全部楼层 发表于 2021-12-14 16:12:09
可以对表中的数据进行组内排序,比如对主键分组,根据时间降序排序,生成排名,然后取排名为1的数据,就满足去重且取最新的数据了
回复

使用道具 举报

kevin2021青铜三 显示全部楼层 发表于 2022-1-10 18:30:52
切莫意气用事 发表于 2021-12-14 16:12
可以对表中的数据进行组内排序,比如对主键分组,根据时间降序排序,生成排名,然后取排名为1的数据,就满足去重 ...

这个思路很巧妙啊。怎么确定组内排名呢?
回复

使用道具 举报

永洪Tech-CIDX白银二 显示全部楼层 发表于 2022-1-10 19:38:47
kevin2021 发表于 2022-1-10 18:30
这个思路很巧妙啊。怎么确定组内排名呢?

可以参考此SQL:
select *
from test t
where
id
in
(
    select id from test t
    where
    datetime=(select max(datetime) from test t1 where t1.id=t.id)
    group by id
)
and
datetime=(select max(datetime) from test t1 where t1.id=t.id)
其中id 是id字段,datetime是日期字段
回复

使用道具 举报

kevin2021青铜三 显示全部楼层 发表于 2022-1-10 20:33:51
永洪Tech-CIDX 发表于 2022-1-10 19:38
可以参考此SQL:
select *
from test t

感谢。我其实只有一个源表。只是这个表的内容每天会增加,并且老的内容会有更新。比如:一个1月1日创建的项目A,当天的状态是“新建”,第二天是"进行中",第三天是"已完成"。

因为性能问题,不可能每次全量同步。我的数据集是这样设计的:
1)按创建日期,每个月的新建的项目数据存成一个数据集;
2)每天刷新“更新日期=当天”的数据(包含了当天新增的,已经很早创建但是当天有更新的)。
3)把第一步和第二步的数据合并在一起;
4)去掉第三步中项目ID重复的数据;
回复

使用道具 举报

永洪Tech-CIDX白银二 来自手机 显示全部楼层 发表于 2022-1-10 21:08:20
如果要在bi中进行处理,我们需要在报告中新建计算列,因为选取最大值涉及到聚合计算,数据集中无法进行聚合计算。
1.新建计算列用于选取每个id的最大日期
fixed(col['id']::max(col['日期']))
这里我们为计算列修改名称为:最大日期
2.然后再新建一个计算列,用于标记最大日期行和非最大日期行,这里我们标记最大日期行为1,非最大日期行为0
if( dateGap(col['日期'],col['最大日期'],"dayofyear")==0)
then 1
else 0
end
最后在组件中使用过滤器,只选择计算列为1的行
mmexport1641820036118.png
回复

使用道具 举报

kevin2021青铜三 显示全部楼层 发表于 2022-1-11 10:01:55
永洪Tech-CIDX 发表于 2022-1-10 21:08
如果要在bi中进行处理,我们需要在报告中新建计算列,因为选取最大值涉及到聚合计算,数据集中无法进行聚合 ...

赞!这个达到了我最终想要的效果。
回复

使用道具 举报

高级模式
您需要登录后才可以回帖 登录 | 免费注册

  • 官方微信

    欢迎关注永洪服务号!收费为0,价值无限

    扫码关注
  • 新浪微博

    让每位用户轻松挖掘数据价值!

    访问新浪微博
  • 智能客服
50W

会员等你来哦

Copyright   ©2012-2024  北京永洪商智科技有限公司  (京ICP备12050607) 京公网安备110110802011451号 |《永洪社区协议》
返回顶部