Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите составить запос / 4 сообщений из 4, страница 1 из 1
27.06.2007, 13:08
    #34622907
postuser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запос
Есть таблица:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
traffic

bytes double
date_start timestamp
date_end timestamp
napravl boolean (f-исходящий, t-входящий)
id_client int
Нужно получить данные в формате:
Код: plaintext
1.
bytes_IN bytes_OUT date_start date_end id_client
То есть развернуть данные по полю napravl (там, где направление f, то bytes_OUT, где t - bytes_IN). Если нет соответствующей записи (н-р, есть вх, но нетисх, то исх должен быть 0).
Пробовал делать так:
Код: plaintext
1.
2.
3.
4.
5.
SELECT t_1.bytes AS bytes_IN, t_2.bytes AS bytes_OUT, date_start, date_end, id_client 
FROM 
(SELECT bytes, date_start date_end, id_client FROM traffic WHERE napravl='t') AS t_1, 
(SELECT bytes, date_start date_end, id_client FROM traffic WHERE napravl='f') AS t_2 
WHERE t_1.id=t_2.id AND t_1.date_start=t_2.date_start AND t_1.date_end=t_2.date_end;
Но при этом не отображается трафик в одну стоону (если например нет вх, а исх есть). Если делать FULL JOIN, то работает очень медленно.
Есть ли более простые способы получения требуемого результата, н-р, с помощью CASE?
...
Рейтинг: 0 / 0
27.06.2007, 13:19
    #34622965
postuser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запос
Кажется, решил вопрос:
Код: plaintext
CASE WHEN napr='t' THEN bytes ELSE  0  END AS bytes_in, CASE WHEN napr='f' THEN bytes ELSE  0  END AS bytes_out
.
Теперь стоит вопрос создания кросс-таблицы...
...
Рейтинг: 0 / 0
27.06.2007, 15:02
    #34623540
postuser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запос
Что-то я поторопился с ответом, он делит трафик, но формирует две строки вместо одной :(. Жду советов.
...
Рейтинг: 0 / 0
27.06.2007, 16:32
    #34623967
st_serg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запос
чтонить вроде этого
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select
   date_start,
   date_end,
   id_client,
   sum(CASE WHEN napr='t' THEN bytes ELSE  0  END) AS bytes_in,
   sum(CASE WHEN napr='f' THEN bytes ELSE  0  END) AS bytes_out
from traffic
where ....
group by
   date_start,
   date_end,
   id_client
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите составить запос / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]