Hi Leutz,
ich habe eine Tabelle mit jeweils zwei Zeilen die zu einer Zeile zusammen gefasst werden sollen.
Bsp.:
rule_name | bytes | timestmp
-------------------+----------+------------
D Total System | 210 | 12:00
U Total System | 100 | 12:00
D Peter | 210 | 12:00
U Peter | 100 | 12:00
D Total System | 410 | 12:15
U Total System | 200 | 12:15
D Peter | 410 | 12:15
U Peter | 200 | 12:15
Der Name besteht aus einen Benutzernamen und einem D für Download und einem U für Upload.
Die ganzen Werte von jedem Benutzer will ich dann in einer neuen Tabelle stündlich in einer Zeile zusammenfassen.
Der neue Timestamp ist einfach die Stunde der einträge, also in diesem Fall fand alles in der Stunde zwischen 12:00 und 13:00 statt
Herauskommen soll dann:
name | bytes_up | bytes_down | timestmp
-------------------+----------+------------
Total System | 300 | 620 | 12:00
Peter | 300 | 620 | 12:00
Bin jetzt schon soweit, dass ich das ganze in einer neuen Tabelle auslese allerdings noch für Upload und Download jeweils eine Zeile habe.
INSERT INTO hourly (traffic_type, name, bytes, that_time, timestmp )
SELECT
SUBSTRING (rule_name FROM 1 FOR 1) AS traffic_type,
SUBSTRING (rule_name FROM 3 ) AS name,
sum(bytes) AS bytes,
now(),
now()
FROM logs
WHERE
( ( SELECT TIMESTAMP WITH TIME ZONE 'epoch' + that_time * INTERVAL '1 second')
<
( SELECT('now'::timestamp-interval '10 minutes') )
)
GROUP BY rule_name
ORDER BY name, traffic_type;
Die where Klausel selektiert einfach alle Einträge die bis vor zehn Minuten in der Tabelle standen. außerdem wird da noch der Timestamp ein wenig umgewandelt. Habe das im Beispiel mal etwas vereinfachter dargestellt.
Wie schaffe ich es jetzt den Up und Download jeweils in einer Zeile zusammen zu fügen?
Gruß Sunfy