精华内容
下载资源
问答
  • sql server关于查询数据去重

    千次阅读 2017-12-19 14:53:53
    需求:根据 a 表 licence_plate 字段进行一个分组,并获取该记录的open_id关联 b 表获取对应的nicakname等其他的字段,乍一看无非就是一个两表联合查询,但是会出现重复的记录,我们的前提是要根据 a 表的 licence_...

    这是bk_bk_pf_credit_card 表的数据 ,以下简称 a表,由于公司数据表内容就不展示了。一共有324条记录


    下面这一张微信用户数据表,以下简称b表,这个表里面的数据有点多了,大概29000




    需求:根据 a 表 licence_plate 字段进行一个分组,并获取该记录的open_id关联 b 表获取对应的nicakname等其他的字段,乍一看无非就是一个两表联合查询,但是会出现重复的记录,我们的前提是要根据 a 表的 licence_plate  进行分组,用过sql server 的老铁都知道 肯定得不到我们想要的结果, 这也是我用sql server一个比较头疼的地方了,还有一个就是分页。哈哈废话说的有点多了,下面就是我参考大牛的思路写的一个sql ,由于小生第一次写博客可能思路有点混乱。欢迎各位大牛指点。


    SELECT
    a.*, b.headimgurl,
    b.nickname,
    c.[count]
    FROM
    bk_pf_credit_card a
    LEFT JOIN BK_Weixin_User AS b ON a.open_id = b.openid
    left join (select licence_plate,count(licence_plate) as count from bk_pf_credit_card GROUP BY licence_plate) c ON a.licence_plate =c.licence_plate 
    WHERE
    NOT EXISTS (
    SELECT
    1
    FROM
    bk_pf_credit_card
    WHERE
    licence_plate = a.licence_plate
    AND add_time < a.add_time
    )


    这是执行的结果,速度我个人感觉还是挺快的,也达到了我预期的结果了,简单的的说下我的思路:1 将需要的分组的字段写入一个临时表中  2 用 NOT EXISTS里的语句去重,在这里面我是按照时间的大小来选择,也可以根据具体的业务需求来筛选,主要就是这两点。这个给我提供思路的大神博客地址--http://blog.csdn.net/liuc0317/article/details/6634683

     欢迎大家的点评  吐舌头吐舌头吐舌头


     








    展开全文
  • greendao 查询数据去重

    千次阅读 2018-05-08 10:48:00
    之前我的笨办法是获取所有的数据,然后对得到的数据手动去重(比较每个实体的组别值是否一致,不是就加到一个List集合中)。 笨办法在数量比较小的数据库里面不会有什么影响,但是为了追求完美,我查询了数据库,...

    最近使用greendao的过程中,有一个需求:将数据库的内容根据组别展示。意思就是需要将数据库中的所有组别取出来,然后根据组别加载数据。之前我的笨办法是获取所有的数据,然后对得到的数据手动去重(比较每个实体的组别值是否一致,不是就加到一个List集合中)。 
    笨办法在数量比较小的数据库里面不会有什么影响,但是为了追求完美,我查询了数据库,得到需要”SELECT DISTINCT”字段才能查询,但是SQLite都不会的我,怎么会查询这个呢?这个时候离成功很近了,不过我还是偷懒了——直接去查询人家是怎么实现的?

    private static final String SQL_DISTINCT_ENAME = "SELECT DISTINCT "+EmpDao.Properties.EName.columnName+" FROM "+EmpDao.TABLENAME;
    
    public static List<String> listEName(DaoSession session) {
        ArrayList<String> result = new ArrayList<String>();
        Cursor c = session.getDatabase().rawQuery(SQL_DISTINCT_ENAME, null);
        try{
            if (c.moveToFirst()) {
                do {
                    result.add(c.getString(0));
                } while (c.moveToNext());
            }
        } finally {
            c.close();
        }
        return result;
    }

    通过这个方法直接就可以实现了,但是这个DaoSession对象不好找,是greendao自动生成的对象,然后在EmpDao里面增加getDaoSession()方法是无效的,一编译就将手动添加的方法删除了。我是在自己的GreenDaoHelper方法里面找到的,代码如下:

    /**
     * GreenDao多个数据库的支持类
     * Created by Administrator on 2017/4/4 0004.
     */
    
    public class GreenDaoHelper {
    
    
        private HashMap<String,DaoSession> hash = new HashMap<String,DaoSession>();
    
        public String pBaseDbPath = "/PuCha2.0/PestGeneralSurvey/PuChaSurvey.db";
    
    
        private Context pContext;
    
    
        public GreenDaoHelper(Context pContex,String pBaseDbPath){
            this.pContext = pContex;
            this.pBaseDbPath = pBaseDbPath;
            initDatabase(pBaseDbPath);
        }
    
        /**
         * 初始化greenDao,这个操作建议在Application初始化的时候添加;
         */
        public  DaoSession initDatabase(String pPath) {
            // 通过 DaoMaster 的内部类 DevOpenHelper,你可以得到一个便利的 SQLiteOpenHelper 对象。
            // 可能你已经注意到了,你并不需要去编写「CREATE TABLE」这样的 SQL 语句,因为 greenDAO 已经帮你做了。
            // 注意:默认的 DaoMaster.DevOpenHelper 会在数据库升级时,删除所有的表,意味着这将导致数据的丢失。
            // 所以,在正式的项目中,你还应该做一层封装,来实现数据库的安全升级。
            DaoMaster.DevOpenHelper  mHelper = new DaoMaster.DevOpenHelper(pContext, FormUtil.getInnerSDCardPath()+pPath, null);
            SQLiteDatabase db = mHelper.getWritableDatabase();
            // 注意:该数据库连接属于 DaoMaster,所以多个 Session 指的是相同的数据库连接。
            DaoMaster mDaoMaster = new DaoMaster(db);
            DaoSession mDaoSession = mDaoMaster.newSession();
            hash.put(pPath,mDaoSession);
            return mDaoSession;
        }
    
        public DaoSession getDaoSession(String pDbPath) throws FileNotFoundException {
            DaoSession mDaoSession =  hash.get(pDbPath);
    
            if(!fileIsExists(FormUtil.getInnerSDCardPath()+pDbPath)){
                throw  new FileNotFoundException();
            }
    
            if(mDaoSession == null){
                return  initDatabase(pDbPath);
            }
            return mDaoSession;
        }
    
        public DaoSession getBaseDaoSession(){
            DaoSession mDaoSession =  hash.get(pBaseDbPath);
            if(mDaoSession == null){
                return  initDatabase(pBaseDbPath);
            }
            return  mDaoSession;
        }
    
        public boolean fileIsExists(String pPath){
            try{
                File f=new File(pPath);
                if(!f.exists()){
                    return false;
                }
            }catch (Exception e) {
                // TODO: handle exception
                return false;
            }
            return true;
        }
    
    }

    方法出处

    展开全文
  • 查询重复数据 -- 假设 ID 重复 SELECT ID FROM your_table GROUP BY ID HAVING COUNT(ID)>1; 去重,保留ROWID最小的数据 DELETE FROM your_table a WHERE a.id IN ( SELECT ID FROM your_...

    1. 单字段重复

    • 查询重复数据

      -- 假设 ID 重复
      SELECT ID FROM your_table GROUP BY ID HAVING COUNT(ID)>1;
      
      •  
    • 去重,保留ROWID最小的数据

      DELETE 
      FROM
         your_table a 
      WHERE
         a.id  IN 
         	( SELECT ID FROM your_table GROUP BY ID HAVING COUNT( ID ) > 1 )
         AND ROWID NOT IN 
         	(SELECT min( ROWID ) FROM your_table WHERE id IN GROUP BY id);
      

    2. 多字段重复

    • 查询重复数据
      -- 假设 ID, NAME, INFO
      SELECT
      	ID,NAME,INFO,COUNT(*) 
      FROM
      	your_table
      GROUP BY
      	ID,NAME,INFO HAVING COUNT(*)>1;
      

    • 去重,保留ROWID最小的数据
      DELETE 
      FROM
         your_table a 
      WHERE (a.ID,a.NAME,a.INFO) IN 
         	( SELECT ID,NAME,INFO FROM your_table GROUP BY ID,NAME,INFO HAVING COUNT(*) > 1 ) 
      AND ROWID NOT IN 
         (SELECT min(ROWID) FROM your_table GROUP BY ID,NAME,INFO HAVING COUNT(*) > 1 )
      );
      

    3. 亿级数据处理

    • 如果数据量达到千万级别或者亿级,如果使用 2 中的方法,速度超级慢,耗时超久。所以,建议使用DDL (Data Definition Language,就是操作表结构的语句)方式,实测,前者约12h未跑出,后者1h内出结果。具体如下
      • 假设 表 students 中 idname 和 class 三列唯一确定一行数据,现在有数据总量 3 亿,有重复数据,
        要求:以上三列数据重复的,保留一条即可,这里,我们选择保留rowid最小的一行数据
        -- 创建新表 students_t,并保存 students 中 rowid 最小的数据,这个数据就是去重后所需的数据
        CREATE TABLE AS SELECT * FROM students_t
        WHERE ROWID IN
        	(SELECT MIN(ROWID) FROM students GROUP BY ID,NAME,CLASS);
        -- 修改表名称,将students修改为 其它名称(如,stuents_1),以便于将表 stuents_t 名称修改为 students
        ALTER TABLE students RENAME TO students_1;
        ALTER TABLE students_t RENAME TO students;
        
        • 如果数据库性能足够,可以加上并行,这样处理更快,比如
        ALTER SESSION ENABLE PARALLEL DML;
        -- parallel(x, 16), x 表别名,16 并行数
        CREATE TABLE students_t AS SELECT /*+parallel(x, 16)*/ * FROM students x
        WHERE ROWID IN
        	(SELECT  /*+parallel(x, 16)*/ MIN(ROWID) FROM students GROUP BY ID,NAME,CLASS);
        
        ALTER TABLE students RENAME TO students_1;
        ALTER TABLE students_t RENAME TO students;

     

    展开全文
  • 实现SQL查询数据去重

    千次阅读 2020-04-09 20:05:00
    解决思路 2.1 查询重复数据 2.2使用insert ignore .....SQL语句忽略重复 2.3 清空数据库,重新插入数据 2.4 不动数据库,查询忽略重复数据 2.5 定向删除数据库的重复数据 3. 总结 1. 前言 前几天,调用第三方接口将...

    【今日推荐】:为什么一到面试就懵逼!>>> hot3.png

    • 目录
    • 1.前言
    • 2. 解决思路
    • 2.1 查询重复数据
    • 2.2使用insert ignore .....SQL语句忽略重复
    • 2.3 清空数据库,重新插入数据
    • 2.4 不动数据库,查询忽略重复数据
    • 2.5 定向删除数据库的重复数据
    • 3. 总结

    1. 前言

    前几天,调用第三方接口将接口数据存到数据库,处理逻辑上应该是没有问题的,但检查的时候,发现数据库居然出现数据重复的情况,下面我们来看看为什么会出现这样的情况,在读取数据的时候怎么预防这样的Bug??

    2. 解决思路

    2.1 查询重复数据

    首先,先查询重复数据,SQL语句如下:

    SELECT COUNT(*) as repetitions, partnerid

    FROM t_ystaccountfile_detail

    GROUP BY partnerid

    HAVING repetitions > 1;

    以上查询语句将返回 t_ystaccountfile_detail 表中重复的记录数。 一般情况下,查询重复的值,执行以下操作:

    确定哪一列包含的值可能会重复。

    在列选择列表使用COUNT(*)列出的那些列。

    在GROUP BY子句中列出的列。

    HAVING子句设置重复数大于1。

    2.2使用insert ignore .....SQL语句忽略重复

    INSERT IGNORE INTO 与 INSERT INTO 的区别就是 INSERT IGNORE 会忽略数据库中已经存在的数据,如果数据库没有数据,就插入新的数据,如果有数据的话就跳过这条数据。这样就可以保留数据库中已经存在数据,达到在间隙中插入数据的目的。

    区别如下:

    指令

    已存在

    不存在

    举例

    insert

    报错

    插入

    insert into names(name, age) values(“小明”, 23);

     

    insert ignore

    忽略

    插入

    insert ignore into names(name, age) values(“小明”, 24);

     

    replace

    替换

    插入

    replace into names(name, age) values(“小明”, 25);

     

    (1)插入已存在,忽略新插入的记录,id会自增,不会报错

    mysql> insert ignore into names(name, age) values("大壮", 25);

    Query OK, 0 rows affected, 1 warning (0.00 sec)

    (2)插入不存在,添加新的记录

    mysql> insert ignore into names(name, age) values("壮壮", 25);

    Query OK, 1 row affected (0.01 sec)

    2.3 清空数据库,重新插入数据

    该方法适合数据量不大,而且接口支持指定日期查询,开发者只需要编写一个循环入库函数即可实现(使用该方法需要确保插入数据是不重复的)

    2.4 不动数据库,查询忽略重复数据

    如果你需要读取不重复的数据可以在 SELECT 语句中使用 DISTINCT 关键字来过滤重复数据。

    比如下面SQL语句:
    $sql = "SELECT DISTINCT * FROM `t_ystaccountfile_detail` AS p1 WHERE {$where}  ORDER BY `id` DESC limit {$limits}";

    当然,也可以使用GROUP BY 来分类读取数据表中不重复的数据:

    select 字段名 from 数据表 group by 字段名;

    2.5 定向删除数据库的重复数据

    先创建临时表,将数据不重复的插入到临时表,然后再删除原表,将临时表名改为原表名,操作如下:

    mysql> CREATE TABLE tmp SELECT last_name, first_name, sex FROM person_tbl  GROUP BY (last_name, first_name, sex);

    mysql> DROP TABLE person_tbl;

    mysql> ALTER TABLE tmp RENAME TO person_tbl;

    也可以根据索引和主键的特性,删除标的重复记录

    mysql> ALTER IGNORE TABLE person_tbl

        -> ADD PRIMARY KEY (last_name, first_name);

    3. 总结

    出现错误不要紧,主要是如何解决以及预防以后同样的错误发生,解决数据库数据重复的问题方法还是挺多的,主要是根据业务和实际情况来处理,最后,共勉~

    展开全文
  • 1.rownum字段 Oracle下select语句每个结果集中都有一个...使用rownum需注意:1.rownum的是在取数据的时候产生的序号 。当rownum和order by一起使用时,会首先选出符合rownum条件的记录,然后再进行排序。2.rownum在...
  • 更新日志: [2019-10-17] 文章发布 说明: 本文地址 《》https:// 关于 MaiXiaochai CSDN:https://blog.csdn.net/maixiaochai ...1. 查询重复数据的唯一字段(这里用ID) SELECT ID FROM your_tab...
  • 比如我的数据如下图所示,查询目的是查询出main重复的,并且保留main分组中score最大的一条数据,也参考了很多答案但是并不理想,后来在技术群里请教了一位大神 最后的sql贴出来: select id, main, score ...
  • 先mark一下。之后整理 SELECT a.id, a.type, a.name, a.config_rule_ids AS configRuleIds, a.range_ids AS rangeIds, a.allocation_ids AS allocationIds, a.check_policy AS checkPolicy, a.check_expire1 AS ...
  • 查询出来的数据去重

    2016-04-20 03:41:31
    [img=https://img-bbs.csdn.net/upload/201604/20/1461094717_277070.jpg][/img] 我想让skugid去重,根据最大的pid保留一条skugid 或者只去重skugid,请问怎么写,实在想不出来,才来请教各位大神
  • Oracle查询出现相同的数据去重

    万次阅读 2018-04-26 17:37:27
    对于查询出现完全相同的结果的情况下,需要去重的时候,把 distinct 放在select的后面即可
  • 今天给大家分享的内容是,查询重复数据 下面的代码是 后台控制器的具体代码, public function select_repeat() { $test_data= Db::table(‘data’); //获取phone列数组 $data_phone = Db::table(‘data’)->...
  • 1.模糊查询 原生sql写法: SELECT * FROM 表名 WHERE 字段名 LIKE '%匹配内容%' ; 利用sqlalchemy实现模糊查询: center_filter = db.query(BudgetOrganizational).filter( BudgetOrganizational.center_name....
  • MySQL del数据去重

    2020-06-04 13:47:43
    Mysql del 数据去重 数据表 重复数据只保留第一条,去掉Name列已重复的数据(表Id字段为主键) 思路 1、查询出重复的数据 SELECT * FROM student WHERE `Name` IN ( SELECT `Name` FROM student GROUP ...
  • mysql 数据去重

    2018-03-21 13:49:00
    数据库版本mysql5.5.10 操作工具navicate for mysql 插入数据重复了 用mysql语句去重 -- 查询数量是否大于1 大于1 表示有重复数据 SELECT count(*) FROM financial_summary_detail t GROU...
  • 1、数据去重 DISTINCT:将查询字段的重复数据值去掉 -- 查询员工表中涉及到的所有部门编号 SELECT DISTINCT department_id from employees; 2、合并字段 CONCAT:连接两个字符,参数1,参数2,参数n绑定字段...
  • mysql数据去重

    2017-01-04 15:22:36
    mysql表中存在多条相同数据去重方法。 mysql的delete有以下几个语法注意: 1、不支持limit 2、不支持子查询   SELECT * FROM bank_info c WHERE id IN ( SELECT * FROM ( SELECT id FROM bank_...
  • mysql 语句数据去重

    2019-10-18 11:53:37
    使用 DISTINCT 对查询出来的语句去重 SELECT DISTINCT provinceCode From city 查询单个字段,对单个字段去重 SELECT DISTINCT provinceCode,provinceName From city 查询多个字段,对多个字段去重 ...
  • Sql去重查询数据

    万次阅读 2019-06-10 17:17:20
    最近在工作过程中,面试过程中,部分求职者或者同事,对sql怎么去重查询,不是太熟练 今天下午忙里偷闲, 整理了一下 其实sql基本的查询 ,还是蛮有意思, 下面是我大致整理的几种去重查询 1.存在2条一样的数据,...
  • 【MySQL】数据去重

    热门讨论 2019-03-24 17:54:42
    但是我们又不需要重复的数据,而只是需要显示其中的一种就好,这个时候就需要用到数据去重了,数据可以去重,那么我们是否可以在数据出现重复之前提前做一些措施来防止,带着这样的疑问开始了查询答疑之路;...
  • 海量数据去重

    2021-01-14 22:10:47
    缺点:对于数据量大且查询字符串相似时将会是噩梦 unorder_map 由哈希表实现,数组+哈希函数 将字符串通过哈希函数生成一个整数在银蛇到数组当中,增删改查时间复杂度O(1) 哈希函数的作用:避免插入的时候字符串的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,904
精华内容 761
关键字:

查询数据去重