SQL以显示一列中包含重复值的整行数据

时间:2018-10-30 21:10:34

标签: mysql sql

我一直在寻找解决这个问题的方法,但是没有一种方法能使我完全满足我的需要。

我有三列:inputDate,orderID,employeeID。

我想确定是否重复了orderID,我想找出哪个2(或更多)员工ID都输入了该订单,何时输入。

示例数据:

inputDate            orderID    employeeID
2018-10-30 10:24:56  234264     45
2018-10-30 10:26:12  473897     45
2018-10-30 10:29:59  879546     1
2018-10-30 11:01:04  987654     1
2018-10-30 11:01:04  165498     1
2018-10-30 16:12:59  654321     5
2018-10-30 16:26:25  654321     1
2018-10-30 16:42:02  879546     17

OrderID 654321在其中两次,所以879546也在那里。我需要输出类似于以下内容:

inputDate            OrderID    employeeID
2018-10-30 16:12:59  654321     5
2018-10-30 16:26:25  654321     1
2018-10-30 10:29:59  879546     1
2018-10-30 16:42:02  879546     17

或(更好):

orderID employeeID1 inputDate1          employeeID2 inputDate2
654321  1           2018-10-30 16:12:59 5           2018-10-30 16:26:25
879546  1           2018-10-30 10:29:59 17          2018-10-30 16:42:02

基于'654321'和'879546'是重复值的事实,我需要它来生成该输出。


我能够通过以下方式找到一个愚蠢的解决方案:

SELECT orderID,MIN(employeeID),MIN(inputDate),MAX(employeeID),MAX(inputDate)
FROM `ordersPacked`
GROUP BY orderID
HAVING count(orderID)>1

哪个给了我

orderID   MIN(employeeID)   MIN(inputDate)        MAX(employeeID)   MAX(inputDate)  
654321    1                 2018-10-30 16:12:59   5                 2018-10-30 16:26:25
879546    1                 2018-10-30 10:29:59   17                2018-10-30 16:42:02

是的,我的意思是,从技术上讲,这是我想要的,但这不是合法的解决方案。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您可以汇总数据并将列连接在一起:

SELECT orderID,
       GROUP_CONCAT(employeeID, '-', inputDate)
FROM ordersPacked op
GROUP BY orderID
HAVING count(*) > 1

答案 1 :(得分:1)

您可以在IDORDER上使用过滤器

SELECT * FROM `ordersPacked` WHERE OrderID IN (SELECT OrderID FROM `ordersPacked` GROUP BY OrderID HAVING count(orderID)>1) ORDER BY OrderID, inputDate
相关问题