Frage

Ich will nur eine schnelle Art und Weise (und vorzugsweise nicht eine while-Schleife verwendet wird) von createing eine Tabelle jedes Datum zwischen Datum @x und Datum @y so kann ich auf einige Statistiken Tabellen Outer Join links, haben einige von denen keine Datensätze für bestimmte Tage dazwischen, so dass ich mit einem 0 fehlenden Tage markieren

War es hilfreich?

Lösung

Streng genommen dies nicht genau Ihre Frage beantworten, aber es ist recht ordentlich.

Angenommen, Sie mit Angabe der Anzahl der Tage nach dem Startdatum leben können, dann ein Common Table Expression unter Verwendung gibt Ihnen:

WITH numbers ( n ) AS (
        SELECT 1 UNION ALL
        SELECT 1 + n FROM numbers WHERE n < 500 )
    SELECT DATEADD(day,n-1,'2008/11/01') FROM numbers
    OPTION ( MAXRECURSION 500 )

Andere Tipps

Ich denke, dass Sie könnte genauso gut tut es nur in einer while-Schleife. Ich weiß, es ist hässlich, aber es ist einfach und es funktioniert.

ich tat tatsächlich etwas ähnliches eine kleine Weile zurück, aber ich konnte nicht einen Weg gefunden, die nicht eine Schleife verwendet haben.

Das Beste, was ich bekam eine temporäre Tabelle war, und dann die gewünschten Tage wollte ich komme auf in.

Der Blog bduke verbunden ist nett, obwohl ich die temporäre Tabelle Lösung denken, ist vielleicht eine sauberere Lösung.

Ich habe eine andere Tabelle gefunden, die jeden Tag (es Besucher auf die Website) speichert, so wie über diese ...

Declare @FromDate datetime,  
        @ToDate datetime  
Declare @tmpDates table   
            (StatsDate datetime)
Set @FromDate = DateAdd(day,-30,GetDate())
Set @ToDate = GetDate()

Insert Into  @tmpDates (StatsDate)
Select 
    distinct CAST(FLOOR(CAST(visitDate AS DECIMAL(12, 5))) AS DATETIME)
FROM tbl_visitorstats 
Where visitDate between @FromDate And @ToDate 
Order By CAST(FLOOR(CAST(visitDate AS DECIMAL(12, 5))) AS DATETIME) 


Select * FROM @tmpDates

Es ist auf der anderen Tabelle angewiesen ist für jeden Tag mit einem Eintrag ich will, aber es ist 98% wahrscheinlich werde da Daten für jeden Tag sein.

Eine leichte Drehung auf die Antwort gegeben, wie https://stackoverflow.com/a/95728/395440 . Ermöglicht Tage angegeben werden und berechnet auch auf das aktuelle Datum Bereich bis.

DECLARE @startDate datetime
SET @startDate = '2015/5/29';

WITH number ( n ) AS (
        SELECT 1 UNION ALL
        SELECT 1 + n FROM dates WHERE n < DATEDIFF(Day, @startDate, GETDATE()) )
    SELECT DATEADD(day,n-1,@startDate) FROM number where
    datename(dw, DATEADD(day,n-1,@startDate)) in ('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday')
    OPTION ( MAXRECURSION 500 )

Sie einfach die Schleife schreiben. Jemand hat eine Schleife für diese zu schreiben, sei es Sie -. Oder SQL Server

DECLARE @Dates TABLE
(
  TheDate datetime PRIMARY KEY
)
DECLARE @StartDate datetime, @EndDate datetime
SELECT @StartDate = '2000-01-01', @EndDate = '2010-01-01'


DECLARE @LoopVar int, @LoopEnd int    
SELECT @LoopEnd = DateDiff(dd, @StartDate, @EndDate), @LoopVar = 0


WHILE @LoopVar <= @LoopEnd
BEGIN
  INSERT INTO @Dates (TheDate)
  SELECT DateAdd(dd,@LoopVar,@StartDate)

  SET @LoopVar = @LoopVar + 1
END


SELECT *
FROM @Dates

Just: WHERE col> Start-Datum und col

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top