gpt4 book ai didi

mysql - 删除重复数据

转载 作者:行者123 更新时间:2023-11-29 12:19:05 24 4
gpt4 key购买 nike

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

  1. field table absen (date,time,id_user)
  2. field table employee (name,department,address,id_user)

我尝试了查询:

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

我只想从表中获取最小值和最大值,并删除最小值和最大值之间的所有内容。

注意:我想删除表。

最佳答案

分两步完成:

1。获取您的数据及其相关的最小最大日期:

您可以使用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.删除与上述想要的结果集不相关或不属于的数据。

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

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;

这里是THE DEMO我所做的事情。

关于mysql - 删除重复数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29313707/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com