USE [master] GO CREATE DATABASE [DCS] ON PRIMARY ( NAME = N'DCS', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\DCS.mdf' , SIZE = 11264KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ) LOG ON ( NAME = N'DCS_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\DCS_log.ldf' , SIZE = 76736KB , MAXSIZE = 2048GB , FILEGROWTH = 10%) COLLATE SQL_Latin1_General_Pref_CP850_CI_AS GO EXEC dbo.sp_dbcmptlevel @dbname=N'DCS', @new_cmptlevel=90 GO IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled')) begin EXEC [DCS].[dbo].[sp_fulltext_database] @action = 'disable' end GO ALTER DATABASE [DCS] SET ANSI_NULL_DEFAULT OFF GO ALTER DATABASE [DCS] SET ANSI_NULLS OFF GO ALTER DATABASE [DCS] SET ANSI_PADDING OFF GO ALTER DATABASE [DCS] SET ANSI_WARNINGS OFF GO ALTER DATABASE [DCS] SET ARITHABORT OFF GO ALTER DATABASE [DCS] SET AUTO_CLOSE OFF GO ALTER DATABASE [DCS] SET AUTO_CREATE_STATISTICS ON GO ALTER DATABASE [DCS] SET AUTO_SHRINK OFF GO ALTER DATABASE [DCS] SET AUTO_UPDATE_STATISTICS ON GO ALTER DATABASE [DCS] SET CURSOR_CLOSE_ON_COMMIT OFF GO ALTER DATABASE [DCS] SET CURSOR_DEFAULT GLOBAL GO ALTER DATABASE [DCS] SET CONCAT_NULL_YIELDS_NULL OFF GO ALTER DATABASE [DCS] SET NUMERIC_ROUNDABORT OFF GO ALTER DATABASE [DCS] SET QUOTED_IDENTIFIER OFF GO ALTER DATABASE [DCS] SET RECURSIVE_TRIGGERS OFF GO ALTER DATABASE [DCS] SET ENABLE_BROKER GO ALTER DATABASE [DCS] SET AUTO_UPDATE_STATISTICS_ASYNC OFF GO ALTER DATABASE [DCS] SET DATE_CORRELATION_OPTIMIZATION OFF GO ALTER DATABASE [DCS] SET TRUSTWORTHY OFF GO ALTER DATABASE [DCS] SET ALLOW_SNAPSHOT_ISOLATION OFF GO ALTER DATABASE [DCS] SET PARAMETERIZATION SIMPLE GO ALTER DATABASE [DCS] SET READ_WRITE GO ALTER DATABASE [DCS] SET RECOVERY FULL GO ALTER DATABASE [DCS] SET MULTI_USER GO ALTER DATABASE [DCS] SET PAGE_VERIFY CHECKSUM GO ALTER DATABASE [DCS] SET DB_CHAINING OFF GO USE [DCS] GO IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[SR3600DataSeries]') AND type in (N'U')) DROP TABLE [dbo].[SR3600DataSeries] GO CREATE TABLE [DCS].[dbo].[SR3600DataSeries] ( [series_id] int identity ,[system_name] nvarchar(1024) not null ,[start_date] datetime not null ,[end_date] datetime null ,[calibration_factor] numeric(6,2) not null ,[channel_name] nvarchar(1024) not null ,[property_id] int ,[property_description] nvarchar(1024) ,[data_points] int null ,CONSTRAINT [PK_SR3600DataSeries] PRIMARY KEY CLUSTERED ( [series_id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ); GO IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[SR3600Data]') AND type in (N'U')) DROP TABLE [dbo].[SR3600Data] GO CREATE TABLE [DCS].[dbo].[SR3600Data] ( [data_id] int identity ,[series_id] int not null ,[dcs_time] datetime not null ,[dcs_speed_mph] numeric(6,1) ,[dcs_speed_kph] numeric(6,1) ,[comment] nvarchar(256) ,CONSTRAINT [PK_SR3600Data] PRIMARY KEY CLUSTERED ( [data_id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ); GO CREATE NONCLUSTERED INDEX [IX_SR3600Data_Time] ON [dbo].[SR3600Data] ( [dcs_time] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = OFF) ON [PRIMARY] GO USE [DCS] GO set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[SR3600_fn_MPHAvgTimeBands]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT')) DROP FUNCTION [dbo].[SR3600_fn_MPHAvgTimeBands] GO /* Test: use dcs go declare @start datetime set @start = getdate(); select * from [SR3600_fn_MPHAvgTimeBands] (@start); */ CREATE FUNCTION [dbo].[SR3600_fn_MPHAvgTimeBands] ( @theDate datetime ) RETURNS TABLE AS RETURN ( select convert(datetime, convert(varchar(10), @theDate, 101)) as [theDate], pvt.* from ( select datepart(hh, dcs_time) as hour, dcs_speed_mph from [dbo].[SR3600Data] where dcs_time between convert(datetime, convert(varchar(10), @theDate, 101)) and convert(datetime, convert(varchar(10), @theDate, 101)) + 1 ) p pivot ( avg (dcs_speed_mph) FOR hour IN ( [0], [1], [2], [3], [4], [5], [6], [7], [8], [9],[10], [11], [12], [13], [14],[15], [16], [17], [18], [19],[20], [21], [22], [23]) ) AS pvt ) GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[SR3600_fn_MPHSpeedBands]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT')) DROP FUNCTION [dbo].[SR3600_fn_MPHSpeedBands] GO /* Test: use dcs go declare @start datetime set @start = getdate(); select * from [SR3600_fn_MPHSpeedBands] (@start); */ CREATE FUNCTION [dbo].[SR3600_fn_MPHSpeedBands] ( @theDate datetime ) RETURNS TABLE AS RETURN ( select convert(datetime, convert(varchar(10), @theDate, 101)) as [theDate], pvt.* from ( select convert(int, round(dcs_speed_mph, 0)/5) as speed_band from [dbo].[SR3600Data] where dcs_time between convert(datetime, convert(varchar(10), @theDate, 101)) and convert(datetime, convert(varchar(10), @theDate, 101)) + 1 ) p pivot ( COUNT (speed_band) FOR speed_band IN ( [0], [1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12], [13], [14]) ) AS pvt ) GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[SR3600_fn_MPHStatistics]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT')) DROP FUNCTION [dbo].[SR3600_fn_MPHStatistics] GO /* Test: declare @start datetime, @end datetime; declare @limit float; set @start = getdate() - 1; set @end = getdate(); set @limit = 30; select * from [SR3600_fn_MPHStatistics] (@start, @end, @limit); */ CREATE FUNCTION [dbo].[SR3600_fn_MPHStatistics] ( @lowerLimit datetime, @upperlimit datetime, @speedlimit float = 30 ) RETURNS TABLE AS RETURN ( select @lowerLimit as [begin_period], @upperLimit as [end_period], @speedlimit as [speed_limit], ( select count(*) from [dbo].[SR3600Data] where [dcs_time] between @lowerLimit and @upperLimit ) as [count_all], ( select count(*) from [dbo].[SR3600Data] where [dcs_time] between @lowerLimit and @upperLimit and [dcs_speed_mph] > @speedlimit ) as [count_speeders], ( select count(*) from [dbo].[SR3600Data] where [dcs_time] between @lowerLimit and @upperLimit and [dcs_speed_mph] > @speedlimit + 10 ) as [count_10mph_speeders], ( select count(*) from [dbo].[SR3600Data] where [dcs_time] between @lowerLimit and @upperLimit and [dcs_speed_mph] > @speedlimit + 20 ) as [count_20mph_speeders], ( select count(*) from [dbo].[SR3600Data] where [dcs_time] between @lowerLimit and @upperLimit and [dcs_speed_mph] > @speedlimit ) * 100.0 / ( select count(*) from [dbo].[SR3600Data] where [dcs_time] between @lowerLimit and @upperLimit ) as [pct_speeders], ( select avg([dcs_speed_mph]-@speedlimit) from [dbo].[SR3600Data] where [dcs_time] between @lowerLimit and @upperLimit and [dcs_speed_mph] > @speedlimit ) as [average_speed_above_limit], ( select avg([dcs_speed_mph]-@speedlimit)/@speedlimit*100 from [dbo].[SR3600Data] where [dcs_time] between @lowerLimit and @upperLimit and [dcs_speed_mph] > @speedlimit ) as [average_speed_pct_above_limit], ( select avg([dcs_speed_mph]) from [dbo].[SR3600Data] where [dcs_time] between @lowerLimit and @upperLimit and [dcs_speed_mph] > 0 ) as [average_speed], ( select max([dcs_speed_mph]) from [dbo].[SR3600Data] where [dcs_time] between @lowerLimit and @upperLimit ) as [max_speed], ( select [dcs_speed_mph] from [dbo].[SR3600Data] where [dcs_time] = (select max([dcs_time]) from [dbo].[SR3600Data]) ) as [last_speed], ( select max([dcs_speed_mph]) from [dbo].[SR3600Data] ) as [all_time_max_speed], ( select count(*) from [dbo].[SR3600Data] where [dcs_time] between @lowerLimit and @upperLimit and [dcs_speed_mph] = -1 ) as [bad_readings] ) GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[SR3600_fn_MPHTimeBands]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT')) DROP FUNCTION [dbo].[SR3600_fn_MPHTimeBands] GO /* Test: declare @start datetime set @start = getdate(); select * from [SR3600_fn_MPHTimeBands] (@start); */ CREATE FUNCTION [dbo].[SR3600_fn_MPHTimeBands] ( @theDate datetime ) RETURNS TABLE AS RETURN ( select convert(datetime, convert(varchar(10), @theDate, 101)) as [theDate], pvt.* from ( select datepart(hh, dcs_time) as hour, dcs_speed_mph from [dbo].[SR3600Data] where dcs_time between convert(datetime, convert(varchar(10), @theDate, 101)) and convert(datetime, convert(varchar(10), @theDate, 101)) + 1 ) p pivot ( COUNT (dcs_speed_mph) FOR hour IN ( [0], [1], [2], [3], [4], [5], [6], [7], [8], [9],[10], [11], [12], [13], [14],[15], [16], [17], [18], [19],[20], [21], [22], [23]) ) AS pvt ) GO