2016-12-02 75 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

乐意帮忙:) –