我一直在寻找解决这个问题的方法,但是没有一种方法能使我完全满足我的需要。
我有三列: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
是的,我的意思是,从技术上讲,这是我想要的,但这不是合法的解决方案。有什么想法吗?
答案 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