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

7uzetpgm  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(355)

我一直在寻找解决这个问题的办法,但没有一个办法能完全满足我的需要。
我有三列:inputdate、orderid、employeeid。
我想知道orderid是否重复,我想知道哪两个(或更多)员工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

订单号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

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

1sbrub3j

1sbrub3j1#

可以聚合数据并将列连接在一起:

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

bfrts1fy2#

您可以在idorder上使用筛选器

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

相关问题