Удаление дубликатов из запроса - PullRequest
0 голосов
/ 16 мая 2018

У меня есть запрос ниже, который показывает процент времени, в течение которого устройство работает в течение дня, однако, поскольку в данных есть дубликаты, от которых я не могу легко избавиться, что было бы лучшим способом сделать это?

Я пробовал использовать разные и Макс (dtReading)

    SELECT DISTINCT
  workStationNo,
  controllerID,

  CAST(DATEPART(DAY, DATEADD(DAY, DATEDIFF(DAY, 0, MAX(dtReading)), 0)) AS varchar) AS date,
  (CAST(COUNT(*) AS float(1)) / CAST((DATEPART(HOUR, GETDATE()) * 30) AS float(1)) * CAST(100 AS float(1))) AS dayPercentage

FROM Controller
INNER JOIN ManufacturingLayout
  ON Controller.machID = ManufacturingLayout.workStationID
INNER JOIN ReaderData
  ON Controller.ctrlID = ReaderData.controllerID

WHERE dtReading >= CONVERT(datetime, '09/05/2018', 103)
AND dtReading <= DATEADD(HOUR, 24, CONVERT(datetime, '16/05/2018 23:59:59', 103))
AND (EventType = '(0x05)Open switch')
GROUP BY controllerID,
         DATEADD(DAY, DATEDIFF(DAY, 0, dtReading), 0),
         workStationNo
ORDER BY 1, 2

Вывод запроса

Workstation no controllerID  date dayPercentage
ZW01006            38         15    80.20833
ZW01006            38         16    142.0833
ZW01007            30         15    62.5
ZW01007            30         16    120.2083
ZW01008            31         15    92.70833
ZW01008            31         16    141.0417
ZW01010            40         15    0.625

исходные данные

workStationNo   controllerID    dtReading
ZW01007            30           2018-05-16 15:42:39.000
ZW01007            30           2018-05-16 15:42:38.000
ZW01007            30           2018-05-16 15:40:38.000    <- duplicate
ZW01007            30           2018-05-16 15:40:38.000    <- duplicate 
ZW01007            30           2018-05-16 15:38:37.000
ZW01007            30           2018-05-16 15:38:37.000
ZW01007            30           2018-05-16 15:36:37.000
ZW01007            30           2018-05-16 15:36:37.000
ZW01007            30           2018-05-16 15:34:36.000

1 Ответ

0 голосов
/ 16 мая 2018

Вы можете использовать производную таблицу для ваших JOIN до ReaderData, чтобы удалить дубликаты до JOIN:

...
INNER JOIN (SELECT DISTINCT controllerID, dtReading
            FROM ReaderData) ReaderData
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...