Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите написать запрос  [new]
krasaval
Member

Откуда: москва
Сообщений: 40
MS SQL 2008
Есть таблица:

LogTime SourceIP DestinationIP bytessent bytesrecvd
2011-05-30 14:33:27.370 192.168.0.1 93.158.134.203 1150 79672
2011-05-30 14:33:27.370 192.168.0.1 213.180.204.3 1092 81735
2011-05-30 14:33:32.370 192.168.0.1 213.180.204.3 0 0
2011-05-30 14:33:50.290 192.168.0.5 93.158.134.203 10 512
2011-05-30 14:33:50.290 192.168.0.2 87.250.250.3 3021 74187
2011-05-30 14:33:58.417 192.168.0.1 77.88.21.3 92 3828
2011-05-30 14:33:58.417 192.168.0.2 87.250.250.203 0 82719
2011-05-30 14:34:22.760 192.168.0.1 87.250.251.3 0 52


Необходимо получить таблицу, за последние 5 минут, в которой SourceIP, SUM(bytessent), SUM(bytesrecvd) и количество строк с одинаковым SourceIP, причем bytessent<>0 или bytesrecvd<>0. Т.е. получить

SourceIP bytessent bytesrecvd Connection
192.168.0.1 2 334 165 287 4
192.168.0.2 3 021 156 906 2
192.168.0.5 10 512 1


Пока написал вот так
select * from ISALOG_20110530_FWS_000..Firewalllog
	where ((logTime>'2011-05-30 14:33:00')and(logTime<'2011-05-30 14:35:00')and((bytessent<>0)or(bytesrecvd<>0)))
		order by SourceIP DESC

Хотел написать, так:
select  SourceIP, SUM(bytessent), SUM(bytesrecvd) from ISALOG_20110530_FWS_000..Firewalllog
	where ((logTime>'2011-05-30 14:33:00')and(logTime<'2011-05-30 14:35:00')and((bytessent<>0)or(bytesrecvd<>0)))
                group by SourceIP
 		    order by SourceIP DESC

SQL выдает ошибку
31 май 11, 18:10    [10740942]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
krasaval,

а какую ошибку выдает SQL надо угадать?
31 май 11, 18:21    [10741012]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
Iola
Member

Откуда:
Сообщений: 1
мда
31 май 11, 18:34    [10741057]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
aleks2
Guest
Интересна, чем помешали bytessent=0 или bytesrecvd=0 в суммах, шоб парить сервер дурацкой фильтрацией?
31 май 11, 18:52    [10741137]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
Гадя Петрович
Member

Откуда: планета Плюк, 215 в тентуре, галактика Кин-дза-дза в Спирали
Сообщений: 52912
aleks2
Интересна, чем помешали bytessent=0 или bytesrecvd=0 в суммах, шоб парить сервер дурацкой фильтрацией?
там or
31 май 11, 18:54    [10741147]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
aleks2
Guest
Гадя Петрович
aleks2
Интересна, чем помешали bytessent=0 или bytesrecvd=0 в суммах, шоб парить сервер дурацкой фильтрацией?
там or

И чо?
31 май 11, 18:57    [10741158]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
krasaval
Member

Откуда: москва
Сообщений: 40
Всем спасибо за помощь, все заработало. Конец рабочего дня - устал :)
Проблема была с датой - опечатка. Итоговый запрос:

select  SourceIP, SUM(bytessent), SUM(bytesrecvd), Count(*) from ISALOG_20110530_FWS_000..Firewalllog
	where ((logTime>'2011-04-30 14:33:00')and(logTime<'2011-06-30 14:35:00')and((bytessent<>0)or(bytesrecvd<>0)))
                group by SourceIP
 		    order by SourceIP DESC		

Нулевые значения bytessent и bytesrecvd убираю, что бы не искажали результаты. Нужно учитывать только установленные соединения, а дропы будут портить результат.
31 май 11, 20:12    [10741446]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
Гадя Петрович
Member

Откуда: планета Плюк, 215 в тентуре, галактика Кин-дза-дза в Спирали
Сообщений: 52912
aleks2
Гадя Петрович
пропущено...
там or

И чо?
то что если одно из значений нулевое - второе не нужно суммировать
31 май 11, 21:09    [10741600]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
krasaval
Member

Откуда: москва
Сообщений: 40
Появилась задача, добавить сумму bytesrecvd для каждого SourceIP за последний час, т.е. в колонку
Total Recv, поставить сумму bytesrecvd за последний час для каждого, у меня в запросе выводится сумма для всех
за последний час.

SourceIP Sent Kb % Total Sent Recv Kb % Total Recv Connect Total Recv
192.168.0.1 2978 99 3354 48 911 168572
192.168.0.2 50 0 512 7 3 168572
192.168.0.5 1 0 3021 43 2 168572


declare @TotalBytesSent bigint, @TotalBytesRecv bigint
declare @Date1 datetime, @Date2 datetime , @Date3 datetime

 set @date1=CONVERT(varchar,getdate(),120)
 set @date2=dateadd(minute ,-2,@date1)
 set @date3=dateadd(minute,-59,@date1) 
 select @TotalBytesSent=SUM(bytessent) from ISALOG_20110530_FWS_000..Firewalllog
	where ((logTime>@date2)and(logTime<@date1))
 select @TotalBytesRecv=SUM(bytesrecvd) from ISALOG_20110530_FWS_000..Firewalllog
	where ((logTime>@date2)and(logTime<@date1))
	
select  dbo.Int2IP(SourceIP) as [SourceIP], 
		SUM(bytessent)/1024 as [Sent, Kb], SUM(bytessent)*100/@TotalBytesSent as [% Total Sent],
		SUM(bytesrecvd)/1024 as [Recv, Kb], SUM(bytesrecvd)*100/@TotalBytesRecv as [% Total Recv],
		Count(*) as [Connect], 
		(select SUM(bytesrecvd)/1024 from ISALOG_20110530_FWS_000..Firewalllog where ((logTime>@date3)and(logTime<@date1))) as [Total Rec]
	from ISALOG_20110530_FWS_000..Firewalllog
		where ((logTime>@date2)and(logTime<@date1)and((bytessent<>0)or(bytesrecvd<>0)))
			group by SourceIP
 				order by SourceIP DESC

1 июн 11, 18:13    [10748055]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить