Как я могу оценить эту таблицу? - PullRequest
0 голосов
/ 12 мая 2009

мне нужен второй стол.

CREATE TABLE #Temp (VisitingCount int, [Time] int, [Date] nvarchar(50) )
DECLARE @DateNow DATETIME,@i int,@Time int, @Date nvarchar(50)
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 
        set @Date = CONVERT(VARCHAR(5),@DateNow, 108)
        insert into #Temp(VisitingCount,[Time],[Date]) values(0,@Time,@Date )
        set @i=@i+1
    end

select * from #Temp
---------------------------------------------------------------------------

select Sum(VisitingCount) as VisitingCount, Date
from (
  select Sum(VisitingCount) as VisitingCount, [Time],Date
    from #Temp group by [Time],Date
  Union All
    select count(page) as VisitingCount, 
    (datepart(hour,Date)*60+datepart(minute,Date))/30 as [Time], CONVERT(VARCHAR(5),Date, 108) as Date
    from scr_SecuristLog
    where Date between '2009-05-12' and '2009-05-13'
    GROUP BY (datepart(hour,Date)*60+datepart(minute,Date))/30,CONVERT(VARCHAR(5),Date, 108)
  ) X
group by Date
order by 2 asc  

VCount Date<br> 0 10:00<br> 0 10:30<br> 0 11:00<br> 0 11:30<br> 1 11:36<br> 1 11:53<br> 0 12:00<br> 1 12:04<br> 1 12:07<br> 1 12:11<br> 1 12:16<br> 0 12:30<br> 0 13:00<br> 0 13:30<br> 0 14:00<br> 1 14:13<br> 1 14:17<br> 2 14:23<br> 2 14:24<br> 1 14:25<br>


мне нужна эта таблица, смотрите ниже, пожалуйста: Вторая таблица



VCount Date<br> 0 10:00<br> 0 10:30<br> 0 11:00<br> 2 11:30<br> 4 12:00<br> 0 12:30<br> 0 13:00<br> 0 13:30<br> 7 14:00<br>

Ответы [ 2 ]

1 голос
/ 12 мая 2009

Вот пример кода, который объясняет, как вы можете использовать оператор CASE, вы должны быть в состоянии выяснить, как внести изменения в ваш код

--sample data
create table #temp (SomeDate datetime)
insert #temp values ( '2009-05-12 11:13:19.667')
insert #temp values ( '2009-05-12 11:12:19.667')
insert #temp values ( '2009-05-12 11:33:19.667')
insert #temp values ( '2009-05-12 11:43:19.667')
insert #temp values ( '2009-05-12 11:03:19.667')
insert #temp values ( '2009-05-12 11:53:19.667')
insert #temp values ( '2009-05-12 11:53:19.667')
insert #temp values ( '2009-05-12 11:23:19.667')

insert #temp values ( '2009-05-12 12:13:19.667')
insert #temp values ( '2009-05-12 12:12:19.667')
insert #temp values ( '2009-05-12 13:33:19.667')
insert #temp values ( '2009-05-12 13:43:19.667')
insert #temp values ( '2009-05-12 14:03:19.667')
insert #temp values ( '2009-05-12 14:53:19.667')
insert #temp values ( '2009-05-12 15:53:19.667')
insert #temp values ( '2009-05-12 15:23:19.667')



--this is the grouping/count query
select count(*),case when datepart(mi,Somedate) < 30 
then dateadd(hh, datediff(hh, 0, Somedate)+0, 0)
 else dateadd(mi,30,dateadd(hh, datediff(hh, 0, Somedate)+0, 0)) end
from #temp
group by case when datepart(mi,Somedate) < 30 
then dateadd(hh, datediff(hh, 0, Somedate)+0, 0)
 else dateadd(mi,30,dateadd(hh, datediff(hh, 0, Somedate)+0, 0)) end

чтобы посмотреть, как на самом деле выглядят данные

select Somedate,case when datepart(mi,Somedate) < 30 
then dateadd(hh, datediff(hh, 0, Somedate)+0, 0)
 else dateadd(mi,30,dateadd(hh, datediff(hh, 0, Somedate)+0, 0)) end
from #temp

выход

vCount  time
4   2009-05-12 11:00:00.000
4   2009-05-12 11:30:00.000
2   2009-05-12 12:00:00.000
2   2009-05-12 13:30:00.000
1   2009-05-12 14:00:00.000
1   2009-05-12 14:30:00.000
1   2009-05-12 15:00:00.000
1   2009-05-12 15:30:00.000
0 голосов
/ 12 мая 2009

создайте вторую таблицу и используйте ее для вставки в нее

select left(Date,2)+':00' as Date, sum(VCount) as VCount
from Table1
group by left(Date,2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...