2016-12-02 74 views
0

我有這段代碼,每小時計算一組事件的發生次數。現在我需要MAX COUNT並將其輸入到不同的表中。我是SQL新手,並且遇到與MAX結合的UPDATE語句和下面的所有問題。任何人都可以幫忙嗎?謝謝!按日期時間計數每小時計算SQL Server組並更新計入表中的最大值?

SELECT CAST(locate_received_date as date) AS 'ForDate', 
    DATEPART(hh, locate_received_date) AS 'OnHour', 
    COUNT (*) AS 'Count' 
    FROM BELL_DPRA2_locates_fact 
    WHERE locate_received_date BETWEEN '2016-12-01 00:00:00.000' AND '2016-12-01 23:59:59.999' 
    GROUP BY CAST(locate_received_date as date), DATEPART(hh, locate_received_date); 

此腳本結果已附加。 enter image description here

編輯:這個答案爲我工作,感謝@agfc。我修改了一下爲我工作。

UPDATE MyTable 
SET MaxHourlyCount = 
    (SELECT Max(A.HourCount) 
     FROM (SELECT CAST(locate_received_date as date) AS 'ForDate', 
    DATEPART(hh, locate_received_date) AS 'OnHour', 
    COUNT (*) AS HourCount 
    FROM BELL_DPRA2_locates_fact 
    WHERE locate_received_date BETWEEN '2016-12-01 00:00:00.000' AND '2016-12-01 23:59:59.999' 
    GROUP BY CAST(locate_received_date as date), DATEPART(hh, locate_received_date)) AS A) 
+0

您的更新在哪裏?你在更新哪張桌子?用什麼值?哪些代碼不工作? – agfc

+0

對不起,我正在編輯這個問題,因爲表格沒有正確顯示。我爲代碼輸出附上了一張圖片 –

+0

這仍然沒有回答。請顯示無法使用的代碼,或者至少提供您想要實現的更多細節。 – agfc

回答

0
-- I'd rename your 'Count' Field to something else not to use the SQL function name.  
UPDATE myOtherTable 
    SET MaxField = SELECT Max(HourCount) FROM (SELECT CAST(locate_received_date as date) AS 'ForDate', 
     DATEPART(hh, locate_received_date) AS 'OnHour', 
     COUNT (*) AS HourCount 
     FROM BELL_DPRA2_locates_fact 
     WHERE locate_received_date BETWEEN '2016-12-01 00:00:00.000' AND '2016-12-01 23:59:59.999' 
     GROUP BY CAST(locate_received_date as date), DATEPART(hh, locate_received_date)) As MyMaxResult; 
+0

這似乎合乎邏輯。我無法執行此操作。在第一個SELECT語句的周圍給我一個錯誤,說錯誤的語法... 我正在檢查所有的名字和所有的東西 –

+0

我很抱歉,有一件小事缺失。我假設你正在使用SQL Server。最後,你需要給你的新選定的名稱。查看更新後的答案。 – agfc

0

您可以使用TOP 1ORDER BY與最大HourCount返回的行。您只需將其作爲子查詢連接到您的表以更新或插入爲新行。如果您包含要將這些數據移動到的表格,我可以更新此答案以反映您的表格。

SELECT TOP 1 
    CAST(locate_received_date as date) AS 'ForDate', 
    DATEPART(hh, locate_received_date) AS 'OnHour', 
    COUNT (*) AS 'Count' 
FROM BELL_DPRA2_locates_fact 
WHERE 
    locate_received_date BETWEEN '2016-12-01 00:00:00.000' AND '2016-12-01 23:59:59.999' 
GROUP BY 
    CAST(locate_received_date as date), 
    DATEPART(hh, locate_received_date) 
ORDER BY Count DESC; 
+1

感謝羅恩,這實際上是一個非常好的提示! –

+0

樂意幫忙:) –