SQL для отображения целых строк данных, которые содержат одинаковые значения в одном столбце - PullRequest
0 голосов
/ 31 октября 2018

Я искал решение этой проблемы, но ни одно из решений не дает мне того, что мне нужно.

У меня есть три столбца: inputDate, orderID, employeeID.

Я хочу выяснить, повторяется ли orderID, и я хочу выяснить, какие 2 (или более) идентификатора сотрудника одновременно вводят этот заказ и когда.

Пример данных:

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 голосов
/ 31 октября 2018

Вы можете использовать фильтр на IDORDER

SELECT * FROM `ordersPacked` WHERE OrderID IN (SELECT OrderID FROM `ordersPacked` GROUP BY OrderID HAVING count(orderID)>1) ORDER BY OrderID, inputDate
0 голосов
/ 31 октября 2018

Вы можете объединять данные и объединять столбцы вместе:

SELECT orderID,
       GROUP_CONCAT(employeeID, '-', inputDate)
FROM ordersPacked op
GROUP BY orderID
HAVING count(*) > 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...