[英]Removing duplicates from query
我在下面的查詢中獲取設備全天運行的百分比時間,但是由於數據中存在重復項,因此我無法輕易擺脫,這是最好的方法?
我試過使用distinct和Max(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
您可以將派生表用於JOIN
到ReaderData
,以便在JOIN
之前刪除重復項:
...
INNER JOIN (SELECT DISTINCT controllerID, dtReading
FROM ReaderData) ReaderData
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.