首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除重复数据

删除重复数据
EN

Stack Overflow用户
提问于 2015-03-28 04:30:00
回答 1查看 63关注 0票数 0

如何删除以下absen表中的重复数据?

  1. 字段表absen (日期、时间、id_user)
  2. 字段表雇员(姓名、部门、地址、id_user)

我试过这个查询:

代码语言:javascript
复制
select absen.date,min(absen.time),max(absen.time),absen.id_user,employee.name
from absen,employee 
where absen.id_user = employee.id_user 
group by absen.tanggal having employee.id_user = '00600320' and absen.tanggal between '2015/01/01' and '2015/01/31' 
order by absen.tanggal asc 

我希望删除此查询中未包含的所有数据,因为员工每天有多行数据。

例子:

代码语言:javascript
复制
2015/01/01 08:00:00 00600320
2015/01/01 08:00:08 00600320
2015/01/01 08:00:15 00600320
2015/01/01 17:10:00 00600320
2015/01/01 17:00:10 00600320
2015/01/01 17:00:12 00600320

我只想从表absen中拿出min和max,删除min和max之间的所有内容。

注:我要删除表。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-28 06:20:45

分两步进行:

1.Get您的数据及其相关的minmax日期:

您可以使用CONCAT函数来连接日期和时间。

代码语言:javascript
复制
select  
        t.id_user,
        min(CONCAT(t.date,' ',t.time)) mindate,
        max(CONCAT(t.date,' ',t.time)) maxdate 
from absen t
join employee on t.id_user = employee.id_user 
group by t.id_user ; 

2.Remove不相关或不属于上述所需结果集的数据。

创建另一个table (或temporary table),将不重复的数据(maxmins )插入其中,然后使用row_subquery从原始表中删除不在新创建的表中的数据,最后删除新创建的表,我创建了另一个表,因为不能同时在同一表上使用delete和select:

代码语言:javascript
复制
create table tbl(id_user int,
                          mindate datetime,
                          maxdate datetime);
insert into tbl
select  
        t.id_user,
        min(CONCAT(t.date,' ',t.time)) mindate,
        max(CONCAT(t.date,' ',t.time)) maxdate 
from absen t
join employee on t.id_user = employee.id_user 
group by t.id_user ;

delete from absen
where 
row(id_user,
    CONCAT(date,' ',time)) not in
(select id_user,mindate from tbl
 union
 select id_user,maxdate from tbl);
drop table tbl;

这是我所做的事的演示

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29313707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档