这是我的表结构:
id emp_id log_date
1 1 2015-1-1
2 1 2015-1-1
3 1 2015-1-2
4 2 2015-1-1
5 2 2015-1-2
6 2 2015-1-2
我想单独为每log_date
个提取emp_id
。
预期产出:
id emp_id log_date
1 1 2015-1-1
2 1 2015-1-1
5 2 2015-1-2
6 2 2015-1-2
答案 0 :(得分:1)
您可以通过多种方式找到重复记录。 一些如下: 1。
SELECT * FROM `table_name` GROUP BY emp_id, log_date having count(emp_id) > 1;
通过以下查询,您可以获取记录重复的确切时间。
SELECT emp_id, count(*) as cnt FROM `table_name` GROUP BY log_date having cnt > 1 ORDER BY cnt desc=;
第二种方法是使用'id'的自动增量ID。它始终是唯一的,因此我们可以使用它来查找重复的记录。
SELECT n1.* FROM table_name n1, table_name n2 WHERE n1.`id` < n2.`id` AND n1.emp_id = n2.emp_id AND n1.log_date = n2.log_date
希望这会奏效。如果您满意,请将anset标记为已接受。谢谢! :)
答案 1 :(得分:1)
您可以使用下面提到的查询来获得所需的结果:
select id,emp_id,log_data from table group by emp_id,log_data;
如果您只想要重复数据,请使用:
select id,emp_id,log_data from table group by emp_id,log_data having count(1)>1;
答案 2 :(得分:0)
试试这个;)
select t1.*
from yourtable t1
inner join (
select emp_id, log_date from yourtable group by emp_id, log_date having count(*) > 1
) t2 on t2.emp_id = t1.emp_id and t2.log_date = t1.log_date
答案 3 :(得分:0)
您可以按如下方式使用cross join
。查询只是检查数据是否匹配,但id
没有。
SELECT t1.*
FROM
tablename t1, tablename t2
WHERE t1.id <> t2.id
AND t1.emp_id = t2.emp_id
AND t1.log_date = t2.log_date
答案 4 :(得分:0)
您也可以使用 HAVING 这样做:
SELECT COUNT(*) AS cnt, t.*
FROM yourtable t
group by emp_id,log_date
having cnt >1;