2016-12-02 8 views
0

私はこのコードを使用して、一連のイベントの発生回数を1時間ごとに数えます。今度はMAX COUNTが必要で、それを別のテーブルに入力してください。私はSQLに慣れていないし、MAXと組み合わせたUPDATEステートメントとその下のすべてに問題がある。誰でも助けてくれますか?ありがとう!時間ごとのDateTimeをカウントし、最大カウントをテーブルに更新する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

あなたはマックスHourCountを持つ行を返すためにTOP 1ORDER BYを使用することができます。新しい行として更新または挿入するには、これをテーブルのサブクエリとしてのみ結合する必要があります。このデータを移動するテーブルを含めると、テーブルを反映するようにこの回答を更新できます。

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

本当に本当に良いヒントです、ありがとうRon! –

+0

お手伝いします:) –

関連する問題