2009-05-11 15 views
0

Wie kann ich #Temp mit scr_SecuristLog Time verbinden (oder union). Schauen Sie bitte [Zeit] SpalteWie kann ich #Temp mit SQL-Tabelle beitreten?


CREATE TABLE #Temp (VisitingCount int, [Time] int) 

DECLARE @DateNow DATETIME,@i int,@Time int 
    set @DateNow='00:00' 
    set @i=1; 
    while(@i<48) 
     begin 
set @DateNow = DATEADD(minute, 30, @DateNow) 
set @Time = (datepart(hour,@DateNow)*60+datepart(minute,@DateNow))/30 
insert into #Temp(VisitingCount,[Time]) values(0,@Time) 
set @[email protected]+1 
end 





select Count(Page) as VisitingCount,[Time]  
from  
(SELECT Page,Date,[user],  
     (datepart(hour,Date)*60+datepart(minute,Date))/30 as [Time]   
     FROM scr_SecuristLog  
) scr_SecuristLog  
where  
     Date between '2009-05-04' and '2009-05-05'  

group by [Time] order by [Time] asc   
return 

Antwort

1

EDIT: Hinzugefügt wurde die GROUP BY-Klausel zu der inneren Abfrage und hinzugefügt Tabelle Aliase der SELECT-Anweisung

Hier ist, was Ihr beitreten Syntax könnte folgendermaßen aussehen:

CREATE TABLE #Temp (VisitingCount int, [Time] int) 
-- 
-- 
-- Insert logic here 
-- 
-- 
select t.VisitingCount, t.[Time] 
from #Temp as t 
inner join (
    select count(page) as VisitingCount, (datepart(hour,Date)*60+datepart(minute,Date))/10 as [Time] 
    from scr_SecuristLog 
    where Date between '2009-05-04' and '2009-05-05' 
    group by Date 
) as s 
    on t.VisitingCount = s.VisitingCount 
     and t.Time = s.Time 
+0

Justin; Ihre Codes geben mir einen Fehler: – Penguen

+0

Msg 8120, Ebene 16, Status 1, Zeile 1 Die Spalte 'scr_SecuristLog.Date' ist in der Auswahlliste ungültig, da sie weder in einer Aggregatfunktion noch in der GROUP BY-Klausel enthalten ist. – Penguen

+0

Msg 8120, Ebene 16, Status 1, Zeile 1 Die Spalte 'scr_SecuristLog.Date' ist in der Auswahlliste ungültig, da sie weder in einer Aggregatfunktion noch in der GROUP BY-Klausel enthalten ist. Msg 209, Ebene 16, Status 1, Zeile 1 Mehrdeutiger Spaltenname 'VisitingCount'. Msg 209, Ebene 16, Status 1, Zeile 1 Mehrdeutiger Spaltenname 'Zeit'. – Penguen

0

Da Sie SQL 2005 verwenden, sollten Sie anstelle der temporären Tabelle einen allgemeinen Tabellenausdruck verwenden:

DECLARE 
    @date_start DATETIME, 
    @date_end DATETIME 

SET @date_start = '2009-05-04' 
SET @date_end = '2009-05-04' 

;WITH Times (start_time, end_time) AS 
(
    SELECT 
     @date_start AS start_time, 
     @date_start AS end_time 
    UNION ALL 
    SELECT 
     DATEADD(mi, 30, start_time) AS start_time, 
     DATEADD(mi, 30, end_time) AS end_time 
    FROM 
     Times 
    WHERE 
     end_time <= DATEADD(dy, 1, @date_end) 
) 
SELECT 
    start_time, 
    end_time, 
    COUNT(*) 
FROM 
    Times T 
INNER JOIN dbo.scr_SecuristLog SL ON 
    SL.date >= T.start_time AND 
    SL.date < T.end_time 
GROUP BY 
    start_time, 
    end_time