2016-06-23 8 views
0

У меня есть эти таблицы сервера SQL:Как выполнить SQL запрос с диапазоном дат

enter image description here

мне нужно сгруппировать вместе каждую категорию потоков и показать пользователю обзор последних недель, о чем свидетельствует это изображение:

enter image description here

Это DataTable опрашивает веб-сервис, который, в свою очередь, запрашивает базу данных.

Цвет галочек зависит от значения CodState: если есть одно состояние равное 4 («Отклонено»), то галочка будет красной. В противном случае, зеленый.

Обратите внимание: поле даты DetailsStream соответствует определенному дню.

Проблема заключается в формулировке запроса с различными диапазонами дат (на фотографии: последние пять недель, с понедельника по пятницу).

EDIT

Как было предложено, мои таблицы схемы:

-- Category: 
CREATE TABLE [dbo].[StreamCategory](
    [Cod] [int] NOT NULL, 
    [Name] [varchar](50) NOT NULL, 
CONSTRAINT [PK_StreamCategory] PRIMARY KEY CLUSTERED 
(
    [Cod] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 



-- Stream 
CREATE TABLE [dbo].[Stream](
    [Id] [int] IDENTITY (1, 1) NOT NULL, 
    [Name] [varchar](100) NOT NULL, 
    [TypeStream] [varchar](15) NOT NULL, 
    [CodCategory] [int] NOT NULL, 
CONSTRAINT [PK_Stream] PRIMARY KEY CLUSTERED 
(
    [Id] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 


ALTER TABLE [dbo].[Stream] WITH CHECK ADD CONSTRAINT [FK_Stream_StreamCategory] FOREIGN KEY([CodCategoria]) 
REFERENCES [dbo].[StreamCategory] ([Cod]) 
GO 

ALTER TABLE [dbo].[Stream] CHECK CONSTRAINT [FK_Stream_StreamCategory] 
GO 



-- State Details stream 
CREATE TABLE [dbo].[StateDetailsStream](
    [Cod] [int] NOT NULL, 
    [Description] [varchar](50) NOT NULL, 
CONSTRAINT [PK_DetailsStream] PRIMARY KEY CLUSTERED 
(
    [Cod] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 



-- Details stream 
CREATE TABLE [dbo].[DetailsStream](
    [Id] [int] IDENTITY (1, 1) NOT NULL, 
    [DateStream] [datetime] NOT NULL, 
    [CodStateDetailsStream] [int] NOT NULL, 
    [IdStream] [int] NOT NULL, 
CONSTRAINT [PK_DetailsStream] PRIMARY KEY CLUSTERED 
(
    [Id] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 


ALTER TABLE [dbo].[DetailsStream] WITH CHECK ADD CONSTRAINT [FK_DetailsStream_StateDetailsStream] FOREIGN KEY([CodStateDetailsStream]) 
REFERENCES [dbo].[StateDetailsStream] ([Cod]) 
GO 

ALTER TABLE [dbo].[DetailsStream] CHECK CONSTRAINT [FK_DetailsStream_StateDetailsStream] 
GO 

ALTER TABLE [dbo].[DetailsStream] WITH CHECK ADD CONSTRAINT [FK_DetailsStream_Stream] FOREIGN KEY([IdStream]) 
REFERENCES [dbo].[Stream] ([Id]) 
GO 

ALTER TABLE [dbo].[DetailsStream] CHECK CONSTRAINT [FK_DetailsStream_Stream] 
GO 

Вставки:

-- StreamCategory 

INSERT INTO [myDb].[dbo].[StreamCategory] 
      ([Cod] 
      ,[Name]) 
    VALUES 
     (1,'Category A'), 
     (2,'Category B'), 
     (3,'Category C') 
GO 



-- Stream 

INSERT INTO [myDb].[dbo].[Stream] 
      ([CodCategory] 
      ,[Name] 
      ) 
    VALUES 
     -- Category A: 
     ( 1  ,'Stream001' ), -- IdStream: 1 
     ( 1  ,'Stream002' ), -- IdStream: 2 
     ( 1  ,'Stream003' ), -- IdStream: 3 
     ( 1  ,'Stream004' ), 
     -- Category B: 
     ( 2  ,'Stream005' ), -- IdStream: 5 
     ( 2  ,'Stream006' ), 
     ( 2  ,'Stream007' ), 
     ( 2  ,'Stream008' ), 
     -- Category C: 
     ( 3  ,'Stream009' ), -- IdStream: 9 
     ( 3  ,'Stream010' ), -- IdStream: 10 
     ( 3  ,'Stream011' ), 
     ( 3  ,'Stream012' ) 
GO 



-- StateDetailsStream 

INSERT INTO [myDB].[dbo].[StateDetailsStream] 
      ([Cod] 
      ,[Description]) 
    VALUES 
     (1, 'InProgress'), 
     (2, 'Received'), 
     (3, 'Ko'), 
     (4, 'Declined') 
GO 



-- DetailsStream 

DECLARE 
@mon as datetime = '20/06/2016' 
DECLARE 
@tue as datetime = @mon+1, 
@wed as datetime = @mon+2, 
@thu as datetime = @mon+3, 
@fry as datetime = @mon+4 


INSERT INTO [myDB].[dbo].[DetailsStream] 
      ([IdStream] -- fk 
      ,[DateStream] 
      ,[CodStateDetailsStream] 
      ) 
    VALUES 
     -- Category A 
     (1 ,@mon   ,2 ), -- Stream001 
     (1 ,@mon   ,2 ), 
     (1 ,@tue   ,2 ), 
     (1 ,@tue   ,2 ), 
     (1 ,@wed   ,3 ), 
     (1 ,@wed   ,2 ), 
     (1 ,@thu   ,2 ), 
     (1 ,@thu   ,2 ), 
     (1 ,@fry   ,2 ), 
     (1 ,@fry   ,1 ), 
     (1 ,@mon+7   ,1 ), 
     (1 ,@mon+7   ,1 ), 
     (1 ,@tue+7   ,3 ), 
     (1 ,@tue+7   ,4 ), 
     (1 ,@wed+7   ,2 ), 
     (1 ,@wed+7   ,1 ), 
     (1 ,@thu+7   ,2 ), 
     (1 ,@thu+7   ,2 ), 
     (1 ,@fry+7   ,4 ), 
     (1 ,@fry+7   ,2 ), 
     (2 ,@mon   ,2 ), -- Stream002 
     (2 ,@mon   ,4 ), 
     (2 ,@tue   ,4 ), 
     (2 ,@tue   ,2 ), 
     (2 ,@wed   ,3 ), 
     (2 ,@wed   ,2 ), 
     (2 ,@thu   ,2 ), 
     (2 ,@thu   ,2 ), 
     (2 ,@fry   ,2 ), 
     (2 ,@fry   ,1 ), 

     -- Category B 
     (5 ,@mon   ,2 ), -- Stream005 
     (5 ,@tue   ,2 ), 
     (5 ,@wed   ,2 ), 
     (5 ,@thu   ,2 ), 
     (5 ,@fry   ,2 ), 

     -- Category C 
     (10 ,@mon   ,1 ), -- Stream010 
     (10 ,@mon   ,2 ), 
     (10 ,@tue   ,2 ), 
     (10 ,@tue   ,3 ), 
     (10 ,@fry   ,2 ), 
     (10 ,@fry   ,4 ), 

     (11 ,@wed   ,4 ), -- Stream011 
     (11 ,@wed   ,1 ), 
     (11 ,@thu   ,2 ), 
     (11 ,@thu   ,3 ) 

(NB: Я не знаю, если это может быть но обычно я использую эту методологию: Web-код формы-b ehind -> WebService -> Основные -> Repository, с юридическими лицами и DTOS общения между различными уровнями)

+3

Любите графики! Можете ли вы опубликовать SQL, который вы уже написали, чтобы удовлетворить ваши требования, чтобы мы могли помочь вам с любой конкретной проблемой, с которой вы сталкиваетесь? Благодарю. – sstan

+1

Вот отличное место для начала. http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –

+0

Я обновил свой вопрос – Gioce90

ответ

0

Вы можете посмотреть в использовании календарь таблицы (что полезно для ряда связанных с датой расчетов ...

Вот ссылка на один: https://www.mssqltips.com/sqlservertip/4054/creating-a-date-dimension-or-calendar-table-in-sql-server/

Используя эту таблицу, вы можете присоединиться на ключе даты в вашу соответствующую дату, затем групп по другим полям в таблице календаря; по звукам этого года и недели. Это должно позволить вам легко сообщать в еженедельные периоды

Смежные вопросы