如何根据解析日期计算事件

时间:2017-07-21 15:33:37

标签: sql sql-server datetime ssms

我正在尝试计算每天发生的FAILURE个事件的数量,并且事件存储在MainEventTable中,其中包含EventDateTimeEventId和{{列1}}。我使用的是SQL Server Management Studio 2016,它没有识别EventStatus功能。这是我到目前为止编写的代码:

DATEFROMPARTS

更新:(感谢@wrslphil和@ PM_77-1以获得有关我的GROUP BY问题的帮助)我已修复上述GROUP BY问题并发现这有效,尽管它是非常笨重。 @KeithL简化了以下......

3 个答案:

答案 0 :(得分:2)

此处不是很多,但如果您的项目不在分组列表中或在您的select子句中汇总,则查询肯定不会运行

我认为你可能需要对你的计数字段进行总结...就像这样

SELECT
    t.EventDate,
    SUM(t.EventCount) as EventCount
FROM (
    SELECT
        CAST(
                (
                    CAST(
                        DATEPART(yyyy,s.EventDateTime)
                        AS VARCHAR(4)
                        ) +
                    CAST(
                        DATEPART(mm,s.EventDateTime)
                        AS VARCHAR(2)
                        ) +
                    CAST(
                        DATEPART(dd,s.EventDateTime)
                        AS VARCHAR(2)
                        )
                ) AS DATE
            ) AS EventDate,
        Count(s.EventId) As EventCount
    FROM (
        SELECT
            EventDateTime,
            EventId
        FROM
            MainEventTable WITH(NOLOCK)
        WHERE EventDateTime > '2016-12-07 00:00:00'
        AND EventStatus = 'FAILURE'
        ) AS s
    ) AS t
GROUP BY t.EventDate;

查询仍然无法运行,因为您的内部查询中存在相同的问题。我可能只是在内部查询中对日期进行转换,并使用包含计数和分组的查询对其进行封装

答案 1 :(得分:1)

您的子查询具有以下结构:

SELECT field1, COUNT(field2) 
FROM theTable

在同一个选择中,您使用“原始”字段和聚合(COUNT)。你没有GROUP BY条款。

您的SQL引擎令人困惑,因为无法确定应该选择field1的值。

如果您打算计算field2 field1的每个值非空值的记录数,那么代码将为:

SELECT field1, COUNT(field2) 
FROM theTable
GROUP BY field1

答案 2 :(得分:1)

select CAST(EventDateTime AS DATE),COUNT(*)
FROM MainEventTable
WHERE EventDateTime > '2016-12-07 00:00:00' 
        AND EventStatus = 'FAILURE'
GROUP BY CAST(EventDateTime AS DATE)