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

Откуда:
Сообщений: 2
Здраствуйте!

У меня появился вопрос:

Есть следующая задача:
надо из одной таблицы (с логами прокси) получить отфильтрованную инфу, но как это заделать не имею ни малейшего понятия.

Нужно заделать следующее
из таблицы _users вынуть 10 пользователей с максимальными значениями по полю bytesrecvd за каждый день, т.е. надо сортировать еще как то и по полю logdate

вот вариант скрипта в T-SQL, что сюда дописать не знаю

USE LOG_DB
GO
SELECT logdate, clientusername, SUM(bytessent) as bytessent, SUM(bytesrecvd) as bytesrecvd
FROM _users
GROUP BY logdate, clientusername
GO

формат поля logdate 2003-09-15 00:00:00.000, т.е. числа меняются, время - нет.

Заранее благодарен.
24 сен 03, 15:54    [351169]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка данных  [new]
Crip
Member

Откуда:
Сообщений: 2490
Чето не совсем понятно чего надо. Может наподобии вот этого?
select * from _users t1

where clientusername in
(select top 10 clientusername
from _users t2
where t2.logdate = t1.logdate
group by clientusername
order by sum(bytesrecvd) desc)
24 сен 03, 16:11    [351207]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка данных  [new]
Павел Воронцов
Member

Откуда: Новосибирск
Сообщений: 2386
Блог

SELECT logdate, clientusername, SUM(bytessent) as bytessent, SUM(bytesrecvd) as bytesrecvd
FROM _users u
GROUP BY logdate, clientusername
HAVING 10 < (SELECT COUNT(1) FROM _users u1
WHERE (SELECT SUM(u2.bytesrecvd)
FROM _users u2
WHERE u2.clientusername = u1.clientusername AND
u2.logdate = u.logdate) >= SUM(u.bytesrecvd))
ORDER BY 1, 4, 2
24 сен 03, 16:14    [351218]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка данных  [new]
Павел Воронцов
Member

Откуда: Новосибирск
Сообщений: 2386
Блог
.. немного подумав

SELECT logdate, clientusername, SUM(bytessent) as bytessent, SUM(bytesrecvd) as bytesrecvd
FROM _users u
GROUP BY logdate, clientusername
HAVING 3 > (SELECT COUNT(distinct u1.clientusername) FROM _users u1
WHERE (SELECT SUM(u2.bytesrecvd)
FROM _users u2
WHERE u2.clientusername = u1.clientusername AND
u2.logdate = u.logdate) > SUM(u.bytesrecvd)
OR ((SELECT SUM(u2.bytesrecvd)
FROM _users u2
WHERE u2.clientusername = u1.clientusername AND
u2.logdate = u.logdate) = SUM(u.bytesrecvd) AND
u1.clientusername < u.clientusername)
)
ORDER BY 1, 4, 2
24 сен 03, 16:28    [351250]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить