Sql 按日期显示注册
我正在尝试创建一个类似以下内容的结果集:Sql 按日期显示注册,sql,tsql,Sql,Tsql,我正在尝试创建一个类似以下内容的结果集: 8/16/19, Enrollment_count 8/17/19, Enrollment_count 8/18/19, Enrollment_count 直到今天 我已经成功地通过调整@asofdate来提取任何给定日期的总注册数的代码 有没有什么简单的方法可以像上面那样获得到目前为止每天的计数 DECLARE @asofdate SMALLDATETIME SET @asofdate = '08/16/2019' SELECT SE.ST
8/16/19, Enrollment_count
8/17/19, Enrollment_count
8/18/19, Enrollment_count
直到今天
我已经成功地通过调整@asofdate来提取任何给定日期的总注册数的代码
有没有什么简单的方法可以像上面那样获得到目前为止每天的计数
DECLARE @asofdate SMALLDATETIME
SET @asofdate = '08/16/2019'
SELECT SE.STU_MASTER_ID
,
MAX(SE.ST_ENROLL_TYPE_ID) AS ST_ENROLL_TYPE_ID
FROM STU_ENROLL SE
WHERE
@asofdate BETWEEN SE.START_DATE AND ISNULL(SE.DROP_DATE,GETDATE())
GROUP BY SE.STU_MASTER_ID
更新:以下是我所做的一些实际有效的东西。。但是,它会在自己的结果集中显示每个结果。有没有办法将其显示为一个结果集
DECLARE @count int
DECLARE @startdate SMALLDATETIME
SET @startdate = '08/16/2019'
WHILE @startdate <= GETDATE()
BEGIN
SET @count = (
SELECT COUNT(DISTINCT SE.STU_MASTER_ID) AS ENROLLED
FROM STU_ENROLL SE
WHERE
@startdate BETWEEN SE.START_DATE AND ISNULL(SE.DROP_DATE,GETDATE())
AND SE.ST_ENROLL_TYPE_ID = 1
)
SELECT @startdate AS 'DATE'
,@count AS ENROLLED
SET @startdate = DATEADD(day, 1, @startdate);
END
如果输出中的日期为StartDate,则以下代码将提供您请求的输出
DECLARE @asofdate SMALLDATETIME
DECLARE @asofdate_end SMALLDATETIME
SET @asofdate= '08/16/2019'
SET @asofdate_end= '09/16/2019'
;With EnrollDates( EnrollDte) as
(
Select @asofdate as EnrollDte
union all
Select Dateadd(day, 1, EnrollDte)
from EnrollDates
where EnrollDte <= @asofdate_end
)
SELECT
--columns you requested
Ed.EnrollDte As EnrollDate,
COUNT(*) AS Enrollment_Count
FROM STU_ENROLL SE
Inner join EnrollDates ed
On Ed.EnrollDte BETWEEN SE.START_DATE AND ISNULL(SE.DROP_DATE,GETDATE())
Group by Ed.EnrollDte
如果输出中的日期为StartDate,则以下代码将提供您请求的输出
DECLARE @asofdate SMALLDATETIME
DECLARE @asofdate_end SMALLDATETIME
SET @asofdate= '08/16/2019'
SET @asofdate_end= '09/16/2019'
;With EnrollDates( EnrollDte) as
(
Select @asofdate as EnrollDte
union all
Select Dateadd(day, 1, EnrollDte)
from EnrollDates
where EnrollDte <= @asofdate_end
)
SELECT
--columns you requested
Ed.EnrollDte As EnrollDate,
COUNT(*) AS Enrollment_Count
FROM STU_ENROLL SE
Inner join EnrollDates ed
On Ed.EnrollDte BETWEEN SE.START_DATE AND ISNULL(SE.DROP_DATE,GETDATE())
Group by Ed.EnrollDte
类似的方法会起作用,首先您需要将输出范围中的所有日期都放在一个表中,然后我们只需将学生注册数据左键联接并聚合:
declare @From date, @To date
set @From = '2019-8-16'
set @To = '2019-9-1'
-- Create list of "as of" dates
declare @Days table ([Day] date)
while (@From <= @To)
begin
insert into @Days values (@From)
set @From = dateadd(day, 1, @From)
end
-- Return student enrolment counts for each day
select d.[Day] as [AS_OF]
,count(*) as Enrollment_Count
from @Days d
left join STU_ENROLL SE
on SE.START_DATE <= d.[Day] AND (SE.DROP_DATE > d.[Day] or SE.DROP_DATE is null)
group by d.[Day]
order by d.[Day]
类似的方法会起作用,首先您需要将输出范围中的所有日期都放在一个表中,然后我们只需将学生注册数据左键联接并聚合:
declare @From date, @To date
set @From = '2019-8-16'
set @To = '2019-9-1'
-- Create list of "as of" dates
declare @Days table ([Day] date)
while (@From <= @To)
begin
insert into @Days values (@From)
set @From = dateadd(day, 1, @From)
end
-- Return student enrolment counts for each day
select d.[Day] as [AS_OF]
,count(*) as Enrollment_Count
from @Days d
left join STU_ENROLL SE
on SE.START_DATE <= d.[Day] AND (SE.DROP_DATE > d.[Day] or SE.DROP_DATE is null)
group by d.[Day]
order by d.[Day]
在您的输出中是否要开始日期和注册计数?在您的输出中是否要开始日期和注册计数?因此,我发送的代码将在某个日期发出注册。我希望能够看到截至某个月的每个日期的总注册人数。假设您将setasdate设置为8/16/19,总注册数为42000,将其更改为8/17/19,总注册数为41500。指定范围内每天的两列,AsOfDate,Total Enrollment Count。这有意义吗?我已经根据你的要求编辑了我的答案。我在这个例子中使用了CTE。当涉及到递归用例时,它非常方便。可能值得一读,以备将来使用。因此,我发送的代码会在某个日期发出注册信息。我希望能够看到截至某个月的每个日期的总注册人数。假设您将setasdate设置为8/16/19,总注册数为42000,将其更改为8/17/19,总注册数为41500。指定范围内每天的两列,AsOfDate,Total Enrollment Count。这有意义吗?我已经根据你的要求编辑了我的答案。我在这个例子中使用了CTE。当涉及到递归用例时,它非常方便。也许值得一读,以备将来使用。