Stored Procedure Properties
| Name | Value |
|---|---|
| Owner | dbo |
| Created | 2004-05-31 |
| Startup | False |
| Encrypted | False |
Creation Options
| Name | Value |
|---|---|
| QUOTED_IDENTIFIER | OFF |
| ANSI_NULLS | ON |
Parameters
| Name | DataType | Length | Type |
|---|---|---|---|
| @DaysBack | int | 4 | INPUT |
| @SumDayCount | bit | 1 | INPUT |
Total: 2 parameter(s)
SQL
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE procedure Reports_UserVisitsByDay
(
@DaysBack int,
@SumDayCount bit
)
AS
DECLARE @UserCount int
DECLARE @PostCount int
DECLARE @AspNetTeamPostCount int
DECLARE @AveragePostPerUser decimal(5,2)
DECLARE @PercentagePostsAspNetTeam decimal(5,2)
DECLARE @ForumStartDate datetime
IF (@DaysBack > 0)
BEGIN
SELECT TOP 1 @ForumStartDate = PostDate FROM Posts ORDER BY PostDate
SET @DaysBack = DATEDIFF(d, GetDate(), @ForumStartDate)
END
-- Create a temporary table to insert results into
CREATE Table #UserVisitsByDay (
StatDate datetime,
UserCount int,
PostCount int,
AvgPostPerUser decimal(5,2),
PostCountAspNetTeam int,
PercentagePostsAspNetTeam decimal(5,2)
)
-- Do for each day
WHILE (@DaysBack <= 0)
BEGIN
IF (@SumDayCount = 1) AND (@DaysBack < -1)
BEGIN
-- Users visited in last day
SELECT @UserCount = Count(*) FROM Users WHERE DatePart(dy, LastActivity) >= DatePart(dy, DateAdd(dy, @DaysBack, GetDate())) AND DatePart(yy, LastActivity) >= DatePart(yy, DateAdd(dy, @DaysBack, GetDate()))
-- Users posted in last day
SELECT @PostCount = Count(*) FROM Posts WHERE DatePart(dy, PostDate) >= DatePart(dy, DateAdd(dy, @DaysBack, GetDate())) AND DatePart(yy, PostDate) >= DatePart(yy, DateAdd(dy, @DaysBack, GetDate()))
-- ASPNet Team post count
SELECT @AspNetTeamPostCount = Count(*) FROM Posts WHERE DatePart(dy, PostDate) >= DatePart(dy, DateAdd(dy, @DaysBack, GetDate())) AND DatePart(yy, PostDate) >= DatePart(yy, DateAdd(dy, @DaysBack, GetDate())) AND Username IN (SELECT Username FROM UsersInRoles WHERE RoleName = 'AspNetTeam')
END
ELSE
BEGIN
-- Users visited in last day
SELECT @UserCount = Count(*) FROM Users WHERE DatePart(dy, LastActivity) = DatePart(dy, DateAdd(dy, @DaysBack, GetDate())) AND DatePart(yy, LastActivity) = DatePart(yy, DateAdd(dy, @DaysBack, GetDate()))
-- Users posted in last day
SELECT @PostCount = Count(*) FROM Posts WHERE DatePart(dy, PostDate) = DatePart(dy, DateAdd(dy, @DaysBack, GetDate())) AND DatePart(yy, PostDate) = DatePart(yy, DateAdd(dy, @DaysBack, GetDate()))
-- ASPNet Team post count
SELECT @AspNetTeamPostCount = Count(*) FROM Posts WHERE DatePart(dy, PostDate) = DatePart(dy, DateAdd(dy, @DaysBack, GetDate())) AND DatePart(yy, PostDate) = DatePart(yy, DateAdd(dy, @DaysBack, GetDate())) AND Username IN (SELECT Username FROM UsersInRoles WHERE RoleName = 'AspNetTeam')
END
-- Calculate avg. post/user
SET @AveragePostPerUser = CAST(@PostCount as decimal) / CAST(@UserCount as decimal)
-- Calculate avg. post/user from ASP.NET Team
SET @PercentagePostsAspNetTeam = CAST(@AspNetTeamPostCount as decimal) / CAST(@PostCount as decimal)
INSERT INTO
#UserVisitsByDay
VALUES (
DATEADD(d, @DaysBack, GetDate()),
@UserCount,
@PostCount,
@AveragePostPerUser,
@AspNetTeamPostCount,
@PercentagePostsAspNetTeam
)
SET @DaysBack = @DaysBack + 1
END
SELECT
StatDate,
UserCount,
PostCount,
AvgPostPerUser,
PostCountAspNetTeam,
PercentagePostsAspNetTeam
FROM
#UserVisitsByDay
ORDER BY
StatDate DESC
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO