如何删除以下absen表中的重复数据?
我试过这个查询:
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 我希望删除此查询中未包含的所有数据,因为员工每天有多行数据。
例子:
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之间的所有内容。
注:我要删除表。
发布于 2015-03-28 06:20:45
分两步进行:
1.Get您的数据及其相关的min和max日期:
您可以使用CONCAT函数来连接日期和时间。
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),将不重复的数据(max和mins )插入其中,然后使用row_subquery从原始表中删除不在新创建的表中的数据,最后删除新创建的表,我创建了另一个表,因为不能同时在同一表上使用delete和select:
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;这是我所做的事的演示。
https://stackoverflow.com/questions/29313707
复制相似问题