如何获取特定日期的记录状态。SQL

维克多·乌德希

我正在尝试创建一个查询以查看在特定时间段内是否打开了记录(警报)。

第一个表只有记录的当前状态。

    table: ALERT

    intID  |CurrentStateID| DateCreated
   -----------------------------------
    3      |Closed        | 10/11/2009

第二个表包含警报状态的历史记录。

    tblState

    intContextID|strToStateName|datTimeStamp
   -----------------------------------
    3       |Unassigned    |10/11/2009
    3       |Closed        |10/14/2009

这是我想要的输出:

    DESIRED OUTPUT

    DATE        |DAY        |TOTAL_OPEN
    -----------------------------------
    10/10/2009  |Friday     |0
    10/11/2009  |Saturday   |1
    10/12/2009  |Sunday     |1
    10/13/2009  |Monday     |1
    10/14/2009  |Tuesday    |0
    10/15/2009  |Wednesday  |0

我能够编写一些代码,但我认为它在 AllDays 表上的连接可能是错误的。

DECLARE @StartDate DATETIME = '2009-10-10';
DECLARE @EndDate DATETIME = '2009-10-15 23:59:59';

WITH AllDays
AS (
    SELECT @StartDate AS [Date]
        , 1 AS [level]

    UNION ALL

    SELECT DATEADD(DAY, 1, [Date])
        , [level] + 1
    FROM AllDays
    WHERE [Date] < @EndDate
    )
SELECT CAST(AllDays.[Date] AS DATE) AS 'DATE'
    , datename(dw, AllDays.[Date]) AS 'DAY'
    ,ISNULL(TOTAL_OPEN, 0) as TOTAL_OPEN
FROM AllDays
LEFT JOIN (
    SELECT DISTINCT s.datTimeStamp AS 'DATE'
        , count(A.intID) AS 'TOTAL_OPEN'
    FROM Alert A
    INNER JOIN tblState S ON A.intID = S.intContextID
    WHERE strToStateName = 'Unassigned'
    GROUP BY datTimeStamp
    ) AS TOTAL_OPEN ON TOTAL_OPEN.DATE = AllDays.[Date]

警报从 10-11 到 10-13 开放,但由于我在 datetimestamp 上加入,结果只显示 1 表示 10/11。

这是架构链接

本压

好的.. 一种(不可否认的)方法来创建一个 udf 来计算给定日期的开放计数,如下所示:

CREATE FUNCTION [dbo].[fn_open_alert_count] (@date date)
RETURNS int
AS
BEGIN
RETURN (SELECT COUNT(intContextID) as opencount FROM tblState  WHERE strToStateName = 'Unassigned' AND datTimeStamp <= @date) - (SELECT COUNT(intContextID) as closedcount FROM tblState  WHERE strToStateName = 'Closed' AND datTimeStamp <= @date) 
END 

然后你可以像这样进行查询:

DECLARE @StartDate DATETIME = '2009-10-10';
DECLARE @EndDate DATETIME = '2009-10-15 23:59:59';

WITH AllDays
AS (
    SELECT @StartDate AS [Date]
        , 1 AS [level]

    UNION ALL

    SELECT DATEADD(DAY, 1, [Date])
        , [level] + 1
    FROM AllDays
    WHERE [Date] < @EndDate
    )
SELECT CAST(AllDays.[Date] AS DATE) AS 'DATE'
    , datename(dw, AllDays.[Date]) AS 'DAY'
    ,[dbo].[fn_open_alert_count](AllDays.[Date])
FROM AllDays

如果您无权创建函数,则可以像这样内联该功能:

DECLARE @StartDate DATETIME = '2009-10-10';
DECLARE @EndDate DATETIME = '2009-10-15 23:59:59';

WITH AllDays
AS (
    SELECT @StartDate AS [Date]
        , 1 AS [level]

    UNION ALL

    SELECT DATEADD(DAY, 1, [Date])
        , [level] + 1
    FROM AllDays
    WHERE [Date] < @EndDate
    )
SELECT CAST(AllDays.[Date] AS DATE) AS 'DATE'
    , datename(dw, AllDays.[Date]) AS 'DAY'
    ,(SELECT COUNT(intContextID) as opencount FROM tblState  WHERE strToStateName = 'Unassigned' AND datTimeStamp <= AllDays.[Date]) - (SELECT COUNT(intContextID) as closedcount FROM tblState  WHERE strToStateName = 'Closed' AND datTimeStamp <= AllDays.[Date]) AS TOTAL_OPEN
FROM AllDays

这给了我以下输出:

DATE        DAY         TOTAL_OPEN
2009-10-10  Saturday    0
2009-10-11  Sunday      1
2009-10-12  Monday      1
2009-10-13  Tuesday     1
2009-10-14  Wednesday   0
2009-10-15  Thursday    0
2009-10-16  Friday      0

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SQL获取特定日期的记录

来自分类Dev

获取特定日期的其他记录

来自分类Dev

如何使用php获取特定日期

来自分类Dev

如何从GoogleFinance获取特定日期的价格?

来自分类Dev

如何获取特定日期的前景元素?

来自分类Dev

如何使用Strophe存档插件获取到特定日期的所有聊天记录?

来自分类Dev

从mysql获取发生在特定日期的记录

来自分类Dev

SQL Server:如何从datetime列中选择具有特定日期的记录

来自分类Dev

如何从 sql server 2012 中的特定日期检索 1 年前的记录

来自分类Dev

获取日期 + 3 天(使用特定日期)SQL

来自分类Dev

如何按日期在SQL中获取特定月份的记录

来自分类Dev

如何动态传递日期以获取特定日期的数据?

来自分类Dev

如何获取每月和每年中特定日期的日期?

来自分类Dev

如何获取特定周中给定日期的日期?

来自分类Dev

如何从PostgreSQL的特定日期获取特定数据?

来自分类Dev

Linq to SQL-在特定日期之前获取每个设备的最新已知历史记录条目

来自分类Dev

如何在特定日期之间的日期进行SQL连接?

来自分类Dev

如果特定日期没有值返回0,如何在mysql中获取最近7天的记录

来自分类Dev

SQL-根据工作周获取特定日期

来自分类Dev

获取从特定日期到今天的SQL的周数

来自分类Dev

如何在mysql中获取特定日期?

来自分类Dev

Android如何获取特定日期的通话次数

来自分类Dev

如何在特定日期后获取文档?

来自分类Dev

如何获取特定日期最早时间的数据?

来自分类Dev

如何根据特定日期获取所有数据?

来自分类Dev

日期之间的JavaScript过滤以获取特定日期范围内的记录

来自分类Dev

从特定日期插入SQL

来自分类Dev

如何从从日期算起的特定ID获取记录?

来自分类Dev

无法从特定日期范围提取记录

Related 相关文章

  1. 1

    SQL获取特定日期的记录

  2. 2

    获取特定日期的其他记录

  3. 3

    如何使用php获取特定日期

  4. 4

    如何从GoogleFinance获取特定日期的价格?

  5. 5

    如何获取特定日期的前景元素?

  6. 6

    如何使用Strophe存档插件获取到特定日期的所有聊天记录?

  7. 7

    从mysql获取发生在特定日期的记录

  8. 8

    SQL Server:如何从datetime列中选择具有特定日期的记录

  9. 9

    如何从 sql server 2012 中的特定日期检索 1 年前的记录

  10. 10

    获取日期 + 3 天(使用特定日期)SQL

  11. 11

    如何按日期在SQL中获取特定月份的记录

  12. 12

    如何动态传递日期以获取特定日期的数据?

  13. 13

    如何获取每月和每年中特定日期的日期?

  14. 14

    如何获取特定周中给定日期的日期?

  15. 15

    如何从PostgreSQL的特定日期获取特定数据?

  16. 16

    Linq to SQL-在特定日期之前获取每个设备的最新已知历史记录条目

  17. 17

    如何在特定日期之间的日期进行SQL连接?

  18. 18

    如果特定日期没有值返回0,如何在mysql中获取最近7天的记录

  19. 19

    SQL-根据工作周获取特定日期

  20. 20

    获取从特定日期到今天的SQL的周数

  21. 21

    如何在mysql中获取特定日期?

  22. 22

    Android如何获取特定日期的通话次数

  23. 23

    如何在特定日期后获取文档?

  24. 24

    如何获取特定日期最早时间的数据?

  25. 25

    如何根据特定日期获取所有数据?

  26. 26

    日期之间的JavaScript过滤以获取特定日期范围内的记录

  27. 27

    从特定日期插入SQL

  28. 28

    如何从从日期算起的特定ID获取记录?

  29. 29

    无法从特定日期范围提取记录

热门标签

归档