2016-06-23 9 views
0

Ich habe diese SQL Server-Tabellen ausführen:Wie SQL-Abfrage mit Datumsbereich

enter image description here

Ich muss Gruppe zusammen jede Kategorie von Bächen und zeigen dem Anwender einen Überblick über die letzten Wochen, wie in bewiesen dieses Bild:

enter image description here

diese Datentabelle abfragt, einen Web-Service, der sich wiederum auf die Datenbank abfragt.

Die Farbe der Markierungen hängt von dem Wert CodState: wenn es auch einen Zustand gleich 4 (‚Verweigert‘) ist dann die Auswahl rot ist. Ansonsten ist grün.

Bitte beachten Sie, dass das Datumsfeld DetailsStream einem bestimmten Tag entspricht.

Das Problem ist die Formulierung der Abfrage mit verschiedenen Bereichen von Daten (im Bild: die letzten fünf Wochen, von Montag bis Freitag).

EDIT

Wie vorgeschlagen, meine Tabellen-Schemata:

-- 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 

Einsätze:

-- 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: Ich weiß nicht, ob es sein könnte interessiert, aber normalerweise verwende ich diese Methode: Web Form Code-b ehind -> WebService -> Kern -> Repository, mit Entitäten und DTOs zwischen den verschiedenen Ebenen zu kommunizieren)

+3

Liebe die Graphen! Können Sie die von Ihnen geschriebene SQL so weit veröffentlichen, dass sie Ihren Anforderungen entspricht, damit wir Ihnen bei jedem spezifischen Problem helfen können, das Sie haben? Vielen Dank. – sstan

+1

Hier ist ein großartiger Ort, um zu beginnen. http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –

+0

Ich habe meine Frage aktualisiert – Gioce90

Antwort

0

Sie in mit einem Kalender Tabelle aussehen könnten (was für eine Reihe von Datum bezogenen Berechnungen nützlich ist ...

Hier ist eine Referenz für eine: https://www.mssqltips.com/sqlservertip/4054/creating-a-date-dimension-or-calendar-table-in-sql-server/

diese Tabelle Verwenden Sie zum Zeitpunkt der Schlüssel zu Ihrem maßgeblichen Zeitpunkt beitreten können, dann die Gruppe von den anderen Feldern in der Kalendertabelle; durch die Geräusche davon das Jahr und die Woche. Dies sollte es Ihnen ermöglichen, leicht in wöchentlichen Abständen zu berichten

Verwandte Themen