我正在使用SQL Server数据库,我需要分别获取每天,每周,每月和每年的新插入记录总数。我的SQL Server数据库中有一列记录日期和时间(数据类型为datetime
)。
我使用以下代码获取每日记录,但不起作用
SQL:
select count(*)
from dbo.Firsttimer
where (Signed_in) = date(date_sub(now());
请问我该如何实现?
答案 0 :(得分:0)
在SQL Server中,您可以使用内置的DateTime
方法获得当前的GetDate()
值。
因此,要在特定的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
答案 1 :(得分:0)
您需要使用条件聚合,即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
如果您希望每周,每月,每年分拆这笔款项,那么最好以另一种方式进行处理。但是,您没有指定此位置,因此我提供了一种滚动方法。