zoukankan      html  css  js  c++  java
  • Sql去重一些技巧

    下午的时候遇到点问题,Sql去重,简单的去重可以用 DISTINCT 关键字去重,不过,很多情况下用这个解决不了问题。重复的数据千变万化,例如:类似于qq、微信的最近联系人功能,读取这些数据肯定要和消息表关联,那样关联的数据会出现很多重复的,只是消息和时间不一样。最终的决定条件是最后一次发消息的时间。那么问题来了,如何做呢

    SELECT colName FROM  ( SELECT MAX(cloName1),cloName2..... FROM tableName(关联表) GROUP BY colName ) t ORDER BY t.colName

     这句sql语句只能过滤数字类型和时间,对于其他的去重条件还是不够的,可以用ROW_NUMBER()来做,Sql如下:

    SELECT t.Id,
           t.PCName,
           t.rowid
    FROM
    (
        SELECT Id,
               PCName,
               ROW_NUMBER() OVER (PARTITION BY PCName ORDER BY Id) AS rowid
        FROM dbo.PC
    ) AS t
    WHERE t.rowid = 1;

    下面是根据having去做的例子:

       a.根据某一列查询重复数据Sql如下:

    select * from A
    where Id in (select Id from A group by Id having count(Id) > 1)

    根据多个列查询重复数据Sql如下:

    select * from A a
    where (a.Id,a.gender) in (select Id,gender from A group by Id,gender having count(*) > 1)
  • 相关阅读:
    Linux系统管理10-----进程和计划任务管理
    07作业进程和任务管理
    Linux系统管理09-----引导过程与服务过程
    网站部署流程
    Docker 安装与使用
    基于NFS共享实现kvm虚拟主机
    GlusterFS 部署
    rsync 远程同步服务部署
    Zabbix 通过 JMX 监控 tomcat
    Zabbix 简单错误 解决方法
  • 原文地址:https://www.cnblogs.com/bobo-pcb/p/4702751.html
Copyright © 2011-2022 走看看