`

查询表中重复数据,按部门排序

 
阅读更多
DROP TABLE IF EXISTS `tempTb`;
CREATE TEMPORARY TABLE tempTb SELECT product_id,project_id,COUNT(*) AS num FROM product GROUP BY product_id, project_id HAVING num > 1 ORDER BY project_id;
DROP TABLE IF EXISTS MaxTb;
CREATE TEMPORARY TABLE MaxTb SELECT product_id,project_id,MAX(product_id) AS maxPdt FROM product
SELECT MAX(product_id),project_id FROM product 
SELECT product.`product_id`,product.`activity_id`,product.`project_id` FROM tempTb LEFT JOIN product ON product.`product_id` = tempTb.product_id AND product.`project_id` = tempTb.project_id;



DROP TABLE IF EXISTS maxTb;
CREATE TEMPORARY TABLE maxTb SELECT product_id,project_id,MAX(product_id) AS maxPdt FROM product GROUP BY project_id;
SELECT maxPdt FROM maxTb;


SELECT a.product_id,a.project_id,a.activity_id,COUNT(*) AS 序号
FROM product AS a ,product AS b
WHERE a.project_id=b.project_id AND   a.product_id<=b.product_id  AND a.`activity_id` >= b.`activity_id`
GROUP BY a.project_id,a.`activity_id`


DROP TABLE IF EXISTS product_temp;
CREATE TEMPORARY TABLE product_temp 
SELECT project_id,activity_id,product_id,count(*) AS num FROM product GROUP BY product_id,project_id HAVING num > 1 ORDER BY project_id,activity_id;

SELECT product.product_id,product.activity_id,product.project_id from product_temp 
LEFT JOIN product ON product_temp.project_id = product.project_id AND product_temp.product_id = product.product_id;

-- 进行过滤查询,查询多余的去掉最小activity_id那条记录
select product_id,activity_id,project_id from product a
where (a.product_id,a.project_id) in (select product_id,project_id from product group by product_id,project_id having count(*) > 1)
and (product_id,project_id,activity_id) not in (select product_id,project_id,min(activity_id) from product group by product_id,project_id having count(*)>1)

-- 排序操作
set @a1='';
set @b1=1;
select project_id,activity_id,
       if(@a1='',@b1,if(@a1=project_id,@b1:=@b1+1,@b1:=1)),
       @a1:=project_id 
  from product 
  order by project_id,activity_id desc;
  
 --序号
set @a1='';
set @b1=1;
select project_id,activity_id,product_id,
       if(@a1='',@b1,if(@a1=project_id,@b1:=@b1+1,@b1:=1)) AS nob,
       @a1:=project_id AS prj_id,
				(select MAX(product_id) from product GROUP BY @al)
  from product 
  order by project_id,activity_id desc; 
  
  -- 过滤掉重复的数据
  set @a1='';
set @b1=1;
select product_id,activity_id,project_id,
       if(@a1='',@b1,if(@a1=project_id,@b1:=@b1+1,@b1:=1)) AS nob,
       @a1:=project_id AS prj_id
from 
(
select product_id,activity_id,project_id from product a
where (a.product_id,a.project_id) in (select product_id,project_id from product group by product_id,project_id having count(*) > 1)
and (product_id,project_id,activity_id) not in (select product_id,project_id,min(activity_id) from product group by product_id,project_id having count(*)>1)
) AS product_ta
order by project_id,activity_id desc;

-- 创建临时表,更新数据库
DROP TABLE IF EXISTS product1_temp;
CREATE TABLE product1_temp SELECT * FROM product1;
UPDATE product1 SET product1.product_id = 
(SELECT product1_temp.product_id-product1_temp.project_id FROM product1_temp 
WHERE product1.project_id = product1_temp.project_id
AND product1.activity_id = product1_temp.activity_id);  

--将最大值融合进去
set @b1=1;
select product_id,activity_id,project_id,maxPrd,
       if(@a1='',@b1,if(@a1=project_id,@b1:=@b1+1,@b1:=1)) AS nob,
       @a1:=project_id AS prj_id
from 
(
select product_id,activity_id,a.project_id,maxPrdTb.maxPrd
from product AS a 
LEFT JOIN (SELECT project_id,MAX(product_id) AS maxPrd FROM product GROUP BY project_id) AS maxPrdTb
ON a.project_id = maxPrdTb.project_id
where (a.product_id,a.project_id) in (select product.product_id,product.project_id from product group by product.product_id,product.project_id having count(*) > 1)
and (a.product_id,a.project_id,a.activity_id) not in (select product.product_id,product.project_id,min(product.activity_id) from product group by product.product_id,product.project_id having count(*)>1)
) AS product_ta
order by project_id,activity_id ASC;

set @a1='';
set @b1=1;
select product_id,activity_id,project_id,maxPrd,
       if(@a1='',@b1,if(@a1=project_id,@b1:=@b1+1,@b1:=1)) + maxPrd AS newPrdId,
       @a1:=project_id AS prj_id
from 
(
select product_id,activity_id,a.project_id,maxPrdTb.maxPrd
from product AS a 
LEFT JOIN (SELECT project_id,MAX(product_id) AS maxPrd FROM product GROUP BY project_id) AS maxPrdTb
ON a.project_id = maxPrdTb.project_id
where (a.product_id,a.project_id) in (select product.product_id,product.project_id from product group by product.product_id,product.project_id having count(*) > 1)
and (a.product_id,a.project_id,a.activity_id) not in (select product.product_id,product.project_id,min(product.activity_id) from product group by product.product_id,product.project_id having count(*)>1)
) AS product_ta
order by project_id,activity_id ASC;
  
  

 进行整合查询

set @a1='';
set @b1=1;
DROP TABLE IF EXISTS my_product;
CREATE TEMPORARY TABLE my_product
select product_id,activity_id,project_id,maxPrd,
       if(@a1='',@b1,if(@a1=project_id,@b1:=@b1+1,@b1:=1)) + maxPrd AS newPrdId,
       @a1:=project_id AS prj_id
from 
(
select product_id,activity_id,a.project_id,maxPrdTb.maxPrd
from product AS a 
LEFT JOIN (SELECT project_id,MAX(product_id) AS maxPrd FROM product GROUP BY project_id) AS maxPrdTb
ON a.project_id = maxPrdTb.project_id
where (a.product_id,a.project_id) in (select product.product_id,product.project_id from product group by product.product_id,product.project_id having count(*) > 1)
and (a.product_id,a.project_id,a.activity_id) not in (select product.product_id,product.project_id,min(product.activity_id) from product group by product.product_id,product.project_id having count(*)>1)
) AS product_ta
order by project_id,activity_id ASC;
SELECT * FROM my_product;

 

以下是数据库的图片


#mysql中两张表数据的部分更新,用tb2的部分数据更新tb1
UPDATE tb1,tb2 SET tb1.address=tb2.address WHERE tb1.name=tb2.name

 
 exists去重

SELECT
*
FROM
表 main
WHERE
NOT EXISTS (
SELECT * FROM 表 sub
WHERE main.division = sub.division AND main.district > sub.district
)

 

  • 大小: 12.9 KB
分享到:
评论

相关推荐

    SQL Server数据库实验_数据查询与更新_简单的单表查询.doc

    1.查找表中所有姓刘的职工的工号,姓名,部门,薪水 2.查找所有定单金额高于20000的所有客户编号 3.查找业务部或会计部的女员工的基本信息。 4.选取编号界于‘C0001’和‘C0004’的客户编号、客户名称、客户地址...

    MySql基本查询、连接查询、子查询、正则表达查询讲解

    查询数据是指从数据库中的数据表或视图中获取所需要的数据,在mysql中,可以使用SELECT语句来查询数据。根据查询条件的不同,数据库系统会找到不同的数据。 SELECT语句的基本语法格式如下: [sql] view plain copy ...

    MySQL重复查询

    MySQL重复查询 文章目录MySQL重复查询1. 基本查询回顾2. 多表查询3. 自连接4. 子查询 1. 基本查询回顾 查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J select * from EMP where (sal...

    C#.net_经典编程例子400个

    57 2.2 Button控件应用 58 实例053 在Button按钮中显示图标 58 2.3 ComboBox控件应用 59 实例054 将数据表中的字段添加到ComboBox控件 59 实例055 带查询功能的ComboBox控件 61 2.4 ...

    《Excel应用大全》示例文件 光盘文件

    • 按照商品采购表中的数值格式显示查询结果 • 提取指定单元格的公式表达式 • 根据立方体指定参数计算公式结果 • 提取固定字符间隔的零件规格号 第3篇 创建图表和图形 • 图表种类 • 柱形图 • 条形图 • 折线...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例058 用TreeSet生成不重复自动排序 随机数组 71 实例059 Map映射集合实现省市级联选择框 73 第4章 字符串处理技术 75 4.1 格式化字符串 76 实例060 把数字格式化为货币字符串 76 实例061 格式化当前日期 77 实例...

    2013版exculGIF格式教程50条

    41.利用“数据透视表”求各部门购买电脑的总数量 42.求排名前三的平均值 43.求指定日期为当月的第几周 44.统计除去重复产品后的个数 45.不更新外部源链接 46.按汉字笔划进行排序 47.快速为数值插入“货币”单位 48....

    数据库编程期末答疑,卷子讲解,SQL server相关操作讲解,如有侵权请联系删除

    如下是一个简化的员工考勤应用E-R图,请在SQL Server中创建名为YQKG的数据库,包括两个数据文件,一个日志文件,文件名按SQL Server对象命名规范定义,数据文件按10%的比例增长,数据库定义完成后输入如下样本数据。...

    C#程序开发范例宝典(第2版).part13

    实例071 在ListView控件中对数据排序或统计 92 实例072 在ListView控件中绘制底纹 93 实例073 在列表视图中拖动视图项 94 实例074 使ListView控件中的选择项高亮显示 97 实例075 带复选框的ListView控件 99 2.7...

Global site tag (gtag.js) - Google Analytics