Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
два вопроса
|
|||
|---|---|---|---|
|
#18+
заранее извиняюсь если глупые. sql плотно занимаюсь не так давно - многие вещи с трудом доходят :) 1. имеем вот такой запрос flow=# SELECT sourcepeeraddress,sum(tooctets),sum(fromoctets) FROM flowd where sourcepeeraddress='192.168.128.82' GROUP BY sourcepeeraddress UNION SELECT destpeeraddress,sum(fromoctets),sum(tooctets) FROM flowd where destpeeraddress='192.168.128.82' GROUP BY destpeeraddress; sourcepeeraddress | sum | sum -------------------------+-------------+------------ 192.168.128.82 | 85202697 | 520100644 192.168.128.82 |136988611| 1417816732 (записей: 2) flow=# необходимо просуммировать строки по столбцам sum. как? 2. хочу построить пару view на основе примерно такого селекта но с выборкой по времени с начала месяца, за предыдущий месяц. время в базе у меня лежит в виде integer (количество секунд). не могу вьехать как вычислить начало месяца. SELECT sourcepeeraddress,sum(tooctets),sum(fromoctets) FROM flowd where sourcepeeraddress=(select ip from ipaddr where id>1 and id<26 and ip=sourcepeeraddress) GROUP BY sourcepeeraddress; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 11:44 |
|
||
|
два вопроса
|
|||
|---|---|---|---|
|
#18+
Ответ на первый вопрос: делай все вообще в один запрос. ЗАчем два раза в таблицу лазить? Используй CASE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 12:17 |
|
||
|
два вопроса
|
|||
|---|---|---|---|
|
#18+
это я и пытаюсь сделать - но! тупое написание flow=# SELECT sum(tooctets),sum(fromoctets) FROM flowd where sourcepeeraddress='192.168.128.82' or destpeeraddress='192.168.128.82'; sum | sum ------------+----------- 1503132665 | 657148441 (1 запись) flow=# отличается от желаемого результата flow=# SELECT sourcepeeraddress,sum(tooctets),sum(fromoctets) FROM flowd where sourcepeeraddress='192.168.128.82' GROUP BY sourcepeeraddress UNION SELECT destpeeraddress,sum(fromoctets),sum(tooctets) FROM flowd where destpeeraddress='192.168.128.82' GROUP BY destpeeraddress; sourcepeeraddress | sum | sum -------------------+-----------+------------ 192.168.128.82 | 85206131 | 520129943 192.168.128.82 | 137018498 | 1417926534 (записей: 2) flow=# 85206131+137018498 не равно 1503132665 как получилось в самом первом селекте. сложить надо sum(tooctets) + sum(fromoctets). вот тут то я и туплю :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 12:53 |
|
||
|
два вопроса
|
|||
|---|---|---|---|
|
#18+
andy777 вот тут то я и туплю :)Ты просто забыл про CASE :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 13:04 |
|
||
|
два вопроса
|
|||
|---|---|---|---|
|
#18+
ну в общем, все вроде получилось и даже обошлись без CASE flow=# CREATE VIEW test_sum AS SELECT ip, (select sum(tooctets) from flowd where sourcepeeraddress=a.ip or destpeeraddress=a.ip) AS in, (select sum(fromoctets) from flowd where sourcepeeraddress=a.ip or destpeeraddress=a.ip) AS out from ipaddr a where id>2 and id<32556; все работает, вычисляется верно. хотелось бы вьюшку ограничить обсчетом начиная с начала месяца по текущую дату - но никак не могу вьехать как это сделать... хоть направление подскажите... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2007, 11:23 |
|
||
|
два вопроса
|
|||
|---|---|---|---|
|
#18+
таки придется тебе с CASE разбираться. Ты же в табличку теперь три раза лазаишь, а можно всё за один проход по ней сделать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2007, 11:26 |
|
||
|
два вопроса
|
|||
|---|---|---|---|
|
#18+
Бабичев Сергейтаки придется тебе с CASE разбираться. Ты же в табличку теперь три раза лазаишь, а можно всё за один проход по ней сделать...А, пардон... В таблицу с трафиком ты два раза ходишь и ещё один раз в таблицу со списком IP-адресов. Таки можно все за один проход по таблице с трафиком реализовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2007, 11:27 |
|
||
|
два вопроса
|
|||
|---|---|---|---|
|
#18+
andy7772. хочу построить пару view на основе примерно такого селекта но с выборкой по времени с начала месяца, за предыдущий месяц. время в базе у меня лежит в виде integer (количество секунд). не могу вьехать как вычислить начало месяца. SELECT sourcepeeraddress,sum(tooctets),sum(fromoctets) FROM flowd where sourcepeeraddress=(select ip from ipaddr where id>1 and id<26 and ip=sourcepeeraddress) GROUP BY sourcepeeraddress;Видимо есть какая-то точка отсчета, относительно которой ведется отсчет времени в секундах? Что-то типа UNIXTIME. Если есть такая точка отсчета, то сложности никакой нет - к точке отсчета прибавляешь свое время в секундах, получаешь нормальное значение для даты. Получить же начала месяца из даты можно как минимум двумя функциями по работе с датами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2007, 11:34 |
|
||
|
два вопроса
|
|||
|---|---|---|---|
|
#18+
Бабичев Сергей Бабичев Сергейтаки придется тебе с CASE разбираться. Ты же в табличку теперь три раза лазаишь, а можно всё за один проход по ней сделать...А, пардон... В таблицу с трафиком ты два раза ходишь и ещё один раз в таблицу со списком IP-адресов. Таки можно все за один проход по таблице с трафиком реализовать. можно, почему же нет. только откуда я узнаю адреса клиентов как не из таблицы с их адресами? :) остальные мне нафиг не нужны. вот сократить до одного захода в таблицу с трафиком - это было бы хорошо. но пока меня и так устраивает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2007, 13:37 |
|
||
|
два вопроса
|
|||
|---|---|---|---|
|
#18+
Бабичев Сергей andy7772. хочу построить пару view на основе примерно такого селекта но с выборкой по времени с начала месяца, за предыдущий месяц. время в базе у меня лежит в виде integer (количество секунд). не могу вьехать как вычислить начало месяца. SELECT sourcepeeraddress,sum(tooctets),sum(fromoctets) FROM flowd where sourcepeeraddress=(select ip from ipaddr where id>1 and id<26 and ip=sourcepeeraddress) GROUP BY sourcepeeraddress;Видимо есть какая-то точка отсчета, относительно которой ведется отсчет времени в секундах? Что-то типа UNIXTIME. Если есть такая точка отсчета, то сложности никакой нет - к точке отсчета прибавляешь свое время в секундах, получаешь нормальное значение для даты. Получить же начала месяца из даты можно как минимум двумя функциями по работе с датами. да, именно unixtime. вот еще бы найти эти функции :) а то читаю документацию и пока никак добраться до них не могу... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2007, 13:47 |
|
||
|
два вопроса
|
|||
|---|---|---|---|
|
#18+
гдето так extract (epoch from date_trunc('month', to_timestamp(unixtime_value))) вернеться unixtime_value на начало месяца ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2007, 14:06 |
|
||
|
два вопроса
|
|||
|---|---|---|---|
|
#18+
andy777вот сократить до одного захода в таблицу с трафиком - это было бы хорошо.Дык, используй же CASE в конце-то концов: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2007, 05:45 |
|
||
|
два вопроса
|
|||
|---|---|---|---|
|
#18+
Бабичев Сергей andy777вот сократить до одного захода в таблицу с трафиком - это было бы хорошо.Дык, используй же CASE в конце-то концов: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Вот так попробуй: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2007, 07:11 |
|
||
|
|

start [/forum/topic.php?fid=53&fpage=301&tid=2005617]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
25ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
30ms |
get tp. blocked users: |
1ms |
| others: | 246ms |
| total: | 340ms |

| 0 / 0 |
