【问题标题】:How to get newly inserted records in SQL Server per day如何每天在 SQL Server 中获取新插入的记录
【发布时间】:2018-08-08 22:20:20
【问题描述】:

我使用的是 SQL Server 数据库,我需要分别获取每天、每周、每月和每年新插入记录的总数。我的 SQL Server 数据库中有一个记录日期和时间的列(数据类型为datetime)。

我使用以下代码获取每日记录但不起作用

SQL:

select count(*) 
from dbo.Firsttimer 
where (Signed_in) = date(date_sub(now());

请问我该如何实现?

【问题讨论】:

  • 好吧,对于初学者来说,SQL Server 没有称为 date、date_sub() 或 now() 的函数。他们应该怎么做?
  • 首先,我的“不起作用”是什么意思?其次,date_sub 是一个mysql 函数,对于sql server 尝试dateadd。这是一个类似的问题:stackoverflow.com/q/15619659/4730201
  • 好的。请您简要介绍一下如何做到这一点?
  • 请花一些时间阅读docs.microsoft.com/en-us/sql/t-sql/functions/… 并完成那里的示例。

标签: sql-server


【解决方案1】:

您需要使用条件聚合,即count(case...),以及getdate()dateadd() 函数。

select
    Today = cast(getdate() as date)
    ,TodayCount = count(case when cast(Signed_in as date) = cast(getdate() as date) then Signed_in)
    ,RollingWeekCount = count(case when cast(Signed_in as date) >= dateadd(day,-7,cast(getdate() as date)) then Signed_in)
    ,Rolling30Days = count(case when cast(Signed_in as date) >= dateadd(day,-30,cast(getdate() as date)) then Signed_in)
    ,Rolling365Days = count(case when cast(Signed_in as date) >= dateadd(day,-365,cast(getdate() as date)) then Signed_in)
from
    YourTable

如果您希望每周、每月、每年都进行此拆分...那么最好以另一种方式处理。但是你没有指定这个,所以我提供了一个滚动方法。

【讨论】:

    【解决方案2】:

    在 SQL Server 中,您可以使用内置的 GetDate() 方法获取当前的 DateTime 值。

    因此,要在特定 DateTime 列中获取所有具有今天日期的记录,您可以执行以下操作:

    DECLARE @FromDate date = CAST(GETDATE() AS date)
    DECLARE @ToDate date = DATEADD(DAY, 1, @FromDate)
    
    SELECT COUNT(*) 
    FROM dbo.Firsttimer 
    WHERE [Signed_in] >= @FromDate
    AND [Signed_in] < @ToDate
    

    要获取一周的第一天和最后一天,您可以阅读this SO post
    this SO post 每月的第一天和最后一天,
    以及一年中的第一天和最后一天 this SO post

    【讨论】:

      猜你喜欢
      • 2015-12-17
      • 2016-01-29
      • 1970-01-01
      • 2020-11-21
      • 1970-01-01
      • 1970-01-01
      • 2013-12-06
      • 2012-11-04
      • 1970-01-01
      相关资源
      最近更新 更多