Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 按日期显示注册_Sql_Tsql - Fatal编程技术网

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。当涉及到递归用例时,它非常方便。也许值得一读,以备将来使用。