【问题标题】:How to get transactions between yesterday and today in SQL Server 2014?如何在 SQL Server 2014 中获取昨天和今天之间的事务?
【发布时间】:2017-09-06 18:18:40
【问题描述】:

我正在尝试统计昨天每小时发生的所有交易。我不希望今天进行交易。但我似乎无法在这种情况下获得正确的代码。

到目前为止我的代码:

SELECT  CAST(TransDT as DATE) as 'TransDate' 
       ,CAST(DATEPART(Hour, TransDT) as varchar) + ':00' as 'Hour' 
       ,LaneID
       ,Direction
       ,COUNT(*) as 'Ct'

FROM Traffic_analysis

WHERE TransDT >= DATEADD (DAY, -1 , SYSDATETIME())
  AND TransDT < CAST(DATEPART(DAY, SYSDATETIME()) as int) --This is the faulty line.

GROUP BY CAST(TransDT as DATE), DATEPART(Hour, TransDT), LaneID, Direction
ORDER BY CAST(TransDT as DATE) ASC

如果我注释掉整个错误行,我也会得到昨天和今天的结果。我只需要昨天的结果。

我要做的是显示一个带有图表的报告,该图表显示每小时、每条车道、每个方向的流量。将所有 NB 流量放在一个列中,将所有 SB 流量放在另一列中会更好。也许是 UNION 加入?

【问题讨论】:

    标签: sql-server sysdatetime


    【解决方案1】:

    你试过了吗?

    WHERE cast(TransDT as date) > DATEADD (DAY, -2 , cast(SYSDATETIME() as date))
      AND cast(TransDT as date) <= DATEADD (DAY, -1 , cast(SYSDATETIME() as date))  
    

    其实我觉得这样就够了

    WHERE cast(TransDT as date) = DATEADD (DAY, -1 , cast(SYSDATETIME() as date))
    

    【讨论】:

    • 当我只做 WHERE TransDT = DATEADD (DAY, -1 , cast(SYSDATETIME() as date)) 我没有得到任何结果。
    • @user1777929 查看我的编辑。但是这种方法不会在 TransDT 上使用索引
    【解决方案2】:

    如果我理解您的问题,您可以执行以下操作:

    Where   TransDT >= Convert(Date, DateAdd(Day, -1, GetDate())
    And     TransDT < Convert(Date, GetDate())
    

    【讨论】:

      【解决方案3】:

      TransDT 是一个日期,但您与一个 INT 比较。

      试试这样的:

      TransDT = CAST(SYSDATETIME() AS DATE)
      

      【讨论】:

        猜你喜欢
        • 2014-05-25
        • 2011-06-14
        • 1970-01-01
        • 2021-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-04
        • 1970-01-01
        相关资源
        最近更新 更多