随笔- 298  文章- 4  评论- 35  阅读- 96万 

 第一种方法:

查找重复数据里最小的id,然后根据id筛选出非最小id的,打标记

复制代码
update gate_fayanzhongxin set match_type = 'FULL_MATCH_REPETE' 
WHERE match_type = 'FULL_MATCH' 
and id NOT IN (

      SELECT min(id)  FROM gate_fayanzhongxin where match_type = 'FULL_MATCH' 
GROUP BY fayan_unique_id
            
     )
           
复制代码

 

查找重复数据里时间最小的, 打标记

update yg_gate_safety_identify a set data_status = 'D' where id in (
    select id from yg_gate_safety_identify identify
    where identify.create_time =
          (select min(create_time) from yg_gate_safety_identify b where identify.gate_id = b.gate_id GROUP BY gate_id having count(*) > 1)
)

 

 

第二种办法

 

pgsql left join关联查询 ,对右表 按时间排序,只取一条

SELECT u.id, u.name, o.order_date
FROM users u
LEFT JOIN (
    SELECT o.user_id,
           o.order_date,
           ROW_NUMBER() OVER (PARTITION BY o.user_id ORDER BY o.order_date ASC) AS rn
    FROM orders o
) o ON u.id = o.user_id AND o.rn = 1;

 

 

 

 

 第二种方法:

 1.先分组查询出来重复的

SELECT substring(mgr_addvcd, 1, 6), gate_name from yg_gate_base_b
where  mgr_addvcd like  '3408%' 

group by substring(mgr_addvcd, 1, 6), gate_name


having count(*) > 1

 

2.再查出来重复的所有数据

复制代码
select * from yg_gate_base_b  where (substring(mgr_addvcd, 1, 6), gate_name) in (

SELECT substring(mgr_addvcd, 1, 6), gate_name from yg_gate_base_b
where  mgr_addvcd like  '3408%' 

group by substring(mgr_addvcd, 1, 6), gate_name


having count(*) > 1
)
复制代码

 

3.对重复的数据,筛选出要标记的

复制代码
select * from yg_gate_base_b  where (substring(mgr_addvcd, 1, 6), gate_name) in (

SELECT substring(mgr_addvcd, 1, 6), gate_name from yg_gate_base_b
where  mgr_addvcd like  '3408%' 

group by substring(mgr_addvcd, 1, 6), gate_name


having count(*) > 1
)
and  geo_batch_update_flag in ('GATE_NOT_MATCH','FAYAN_NOT_MATCH_BATCH_INSERT','GATE_NOT_MATCH_BATCH_INSERT','FAYAN_NOT_MATCH_DELETE')

ORDER BY gate_name
复制代码

 

4. 标记

 

复制代码
update yg_gate_base_b set geo_data_status = 'D', geo_fayan_gate_repete = 'REPETE' where id in(

select id from yg_gate_base_b  where (substring(mgr_addvcd, 1, 6), gate_name) in (

SELECT substring(mgr_addvcd, 1, 6), gate_name from yg_gate_base_b
where  mgr_addvcd like  '3408%' 

group by substring(mgr_addvcd, 1, 6), gate_name


having count(*) > 1
)
and  geo_batch_update_flag in ('GATE_NOT_MATCH','FAYAN_NOT_MATCH_BATCH_INSERT','GATE_NOT_MATCH_BATCH_INSERT','FAYAN_NOT_MATCH_DELETE')

ORDER BY gate_name
)
复制代码

 

 posted on   布鲁布鲁sky  阅读(279)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
历史上的今天:
2016-11-01 C#解析复杂的Json成Dictionary<key,value>并保存到数据库(多方法解析Json 四)
2016-11-01 C# JavaScriptSerializer 解析Json数据(多方法解析Json 三)
2016-11-01 C# JObject解析Json(多方法解析Json 二)
点击右上角即可分享
微信分享提示