Danke Dir,
mußte noch die “Zeit” warum auch immer in “Zeit/1000” ändern dann hat es gepasst.
Super
Guten Abend, ich habe mal wieder ein Problem vielleicht gibt es auch dafür eine Lösung.
Meine Tabelle
id, timestamp, number, sequence
38468, 1542461006075 ,1,1
38475, 1542461028906 ,2,1
38483, 1542461054746 ,3,1
38492, 1542461079093 ,4,1
38501, 1542461104593 ,5,1
38507, 1542461132306 ,6,1
38527, 1542461199444 ,7,1
38535, 1542461224440 ,8,1
38546, 1542461262026 ,9,1
38552, 1542461287806 ,10,1
38969, 1542465082866 ,1,2
38974, 1542465105505 ,2,2
38982, 1542465136039 ,3,2
38987, 1542465164113 ,4,2
38995, 1542465188068 ,5,2
39002, 1542465213866 ,6,2
39007, 1542465236695 ,7,2
39013, 1542465263268 ,8,2
39021, 1542465289305 ,9,2
39026, 1542465314526 ,10,2
.
.
.
Das Ziel der Abfrage, die Ausgabe der Differenzen zwischen den timestamp’s number 10 und timestamp’s number 1
bin für jede Hilfe dankbar
Gruß Simar
gähn.
test=*# select * from simar ;
id | timestamp | number | sequence
-------+---------------+--------+----------
38468 | 1542461006075 | 1 | 1
38475 | 1542461028906 | 2 | 1
38483 | 1542461054746 | 3 | 1
38492 | 1542461079093 | 4 | 1
38501 | 1542461104593 | 5 | 1
38507 | 1542461132306 | 6 | 1
38527 | 1542461199444 | 7 | 1
38535 | 1542461224440 | 8 | 1
38546 | 1542461262026 | 9 | 1
38552 | 1542461287806 | 10 | 1
38969 | 1542465082866 | 1 | 2
38974 | 1542465105505 | 2 | 2
38982 | 1542465136039 | 3 | 2
38987 | 1542465164113 | 4 | 2
38995 | 1542465188068 | 5 | 2
39002 | 1542465213866 | 6 | 2
39007 | 1542465236695 | 7 | 2
39013 | 1542465263268 | 8 | 2
39021 | 1542465289305 | 9 | 2
39026 | 1542465314526 | 10 | 2
(20 rows)
test=*# with tmp as (select * from simar where number in (10,1)) select *, timestamp - lag(timestamp) over (partition by sequence order by id) as differenz from tmp;
id | timestamp | number | sequence | differenz
-------+---------------+--------+----------+-----------
38468 | 1542461006075 | 1 | 1 |
38552 | 1542461287806 | 10 | 1 | 281731
38969 | 1542465082866 | 1 | 2 |
39026 | 1542465314526 | 10 | 2 | 231660
(4 rows)
test=*#
die einen gähnen die anderen schwitzen und verzweifeln ich gehöre leider zu der 2. Gruppe.
Besten Dank für die superschnelle Hilfe, einfach genial!!
Gruß Simar
id, timestamp, number, sequence
38468, 1542461006075 ,1,1
38475, 1542461028906 ,2,1
38483, 1542461054746 ,3,1
38492, 1542461079093 ,4,1
38501, 1542461104593 ,5,1
38507, 1542461132306 ,6,1
38527, 1542461199444 ,7,1
38535, 1542461224440 ,8,1
38546, 1542461262026 ,9,1
38552, 1542461287806 ,10,1
38969, 1542465082866 ,11,2
38974, 1542465105505 ,12,2
38982, 1542465136039 ,13,2
38987, 1542465164113 ,14,2
38995, 1542465188068 ,15,2
39002, 1542465213866 ,16,2
39007, 1542465236695 ,17,2
39013, 1542465263268 ,18,2
39021, 1542465289305 ,19,2
39026, 1542465314526 ,20,2
39036, 1542465373233 ,21,3
funktioniert das auch in der konstellationen mit fortlaufenden Nummern,
also gleichzeitig die Differenz zwischen 10 und 1; Differenz 20 und 11; Differenz 30 und 21
wäre natürlich noch genialer
meinst Du so?
test=*# select * from simar ;
id | timestamp | number | sequence
-------+---------------+--------+----------
38468 | 1542461006075 | 1 | 1
38475 | 1542461028906 | 2 | 1
38483 | 1542461054746 | 3 | 1
38492 | 1542461079093 | 4 | 1
38501 | 1542461104593 | 5 | 1
38507 | 1542461132306 | 6 | 1
38527 | 1542461199444 | 7 | 1
38535 | 1542461224440 | 8 | 1
38546 | 1542461262026 | 9 | 1
38552 | 1542461287806 | 10 | 1
38969 | 1542465082866 | 1 | 2
38974 | 1542465105505 | 2 | 2
38982 | 1542465136039 | 3 | 2
38987 | 1542465164113 | 4 | 2
38995 | 1542465188068 | 5 | 2
39002 | 1542465213866 | 6 | 2
39007 | 1542465236695 | 7 | 2
39013 | 1542465263268 | 8 | 2
39021 | 1542465289305 | 9 | 2
39026 | 1542465314526 | 10 | 2
(20 rows)
test=*# select *, s2.timestamp - s1.timestamp as difference from simar s1 left join simar s2 on ((s2.number,s2.sequence)=(s1.number +1, s1.sequence));
id | timestamp | number | sequence | id | timestamp | number | sequence | difference
-------+---------------+--------+----------+-------+---------------+--------+----------+------------
38468 | 1542461006075 | 1 | 1 | 38475 | 1542461028906 | 2 | 1 | 22831
38969 | 1542465082866 | 1 | 2 | 38974 | 1542465105505 | 2 | 2 | 22639
38475 | 1542461028906 | 2 | 1 | 38483 | 1542461054746 | 3 | 1 | 25840
38974 | 1542465105505 | 2 | 2 | 38982 | 1542465136039 | 3 | 2 | 30534
38483 | 1542461054746 | 3 | 1 | 38492 | 1542461079093 | 4 | 1 | 24347
38982 | 1542465136039 | 3 | 2 | 38987 | 1542465164113 | 4 | 2 | 28074
38492 | 1542461079093 | 4 | 1 | 38501 | 1542461104593 | 5 | 1 | 25500
38987 | 1542465164113 | 4 | 2 | 38995 | 1542465188068 | 5 | 2 | 23955
38501 | 1542461104593 | 5 | 1 | 38507 | 1542461132306 | 6 | 1 | 27713
38995 | 1542465188068 | 5 | 2 | 39002 | 1542465213866 | 6 | 2 | 25798
38507 | 1542461132306 | 6 | 1 | 38527 | 1542461199444 | 7 | 1 | 67138
39002 | 1542465213866 | 6 | 2 | 39007 | 1542465236695 | 7 | 2 | 22829
38527 | 1542461199444 | 7 | 1 | 38535 | 1542461224440 | 8 | 1 | 24996
39007 | 1542465236695 | 7 | 2 | 39013 | 1542465263268 | 8 | 2 | 26573
38535 | 1542461224440 | 8 | 1 | 38546 | 1542461262026 | 9 | 1 | 37586
39013 | 1542465263268 | 8 | 2 | 39021 | 1542465289305 | 9 | 2 | 26037
38546 | 1542461262026 | 9 | 1 | 38552 | 1542461287806 | 10 | 1 | 25780
39021 | 1542465289305 | 9 | 2 | 39026 | 1542465314526 | 10 | 2 | 25221
38552 | 1542461287806 | 10 | 1 | | | | |
39026 | 1542465314526 | 10 | 2 | | | | |
(20 rows)
test=*#
Nein nicht so,
die Spalte number ist fortlaufend bis zB bis 100, die Spalte sequence erhöht sich im bei jeder Zehnerzahl in spalte number um 1
Ach ja, den von mir gezeigten JOIN kannst Du entsprechend anpassen - überlasse ich Dir jetzt mal zur Übung.
bin dran, danke
funktioniert!!
zu welchem Zweck? Zur Kontrolle von Trainingszeiten
Vor Jahreswechsel noch ein kleines Problem für mich leider mal wieder nicht lösbar
Mit dem angepasseten Select von “akretschmer”
select Disziplin, number_a, number_b, s2.timestamp - s1.timestamp as difference from simar s1 left join simar s2 on ((s2.number,s2.sequence)=(s1.number +9, s1.sequence));
bekomme ich die Differenz aus timestamp von number_a und timestamp number_b
Disziplin | number_a | number_b | difference | decimal_score
" Auflage Training" 1 , 10 “00:04:59” sum aus 1 bis 10
" Auflage Training" 11 , 20 “00:05:54” sum aus 11 bis 20
" Auflage Training" 21 , 30 “00:04:08” sum aus 21 bis 30
" Auflage Training" 1 , 10 “00:04:49”
" Auflage Training" 11 , 20 “00:04:24”
" Auflage Training" 21 , 30 “00:04:05”
" Auflage Training" 1 , 10 “00:03:52”
" Auflage Training" 11 , 20 “00:04:07”
" Auflage Training" 21 , 30 “00:04:15”
" Auflage Training" 1 , 10 “00:04:32”
" Auflage Training" 11 , 20 “00:04:13”
" Auflage Training" 21 , 30 “00:03:42”
nun liegen aber zwischen number_a und number_b jeweils 10 Einzelwerte “decimal_score” und diese Werte möchte ich summieren und mit der Abfrage anzeigen.
Vielleicht gibt es ja auch dafür eine Lösung wenn nicht sag ich tzotzdem schon mal Danke und wünsch allen einen guten Rutsch ins neue Jahr
Gruß Simar
wie jetzt, da sind 10 Spalten, die du addieren willst?
ja genau, wird aber mit dem Ansatz nicht gehen, denke ich muß zuerst summieren und danach nach der Differenzzeit suchen aber das ist mir zu hoch das bring ich in meinen “alten” Kopf nicht mehr rein.
systematisch rangehen. Du könntest erst die Spalten da alle erstellen, und das in ein Subselect packen und dann daraus die Summe der Spalten. Alternativ mit WITH - Syntax arbeiten.
Sind da wirklich 10 Spalten oder sind das eher 10 Zeilen? (aus denen Zwischensummen entstehen sollen?)
Auch wenn aus den Code Fragmenten für mich kein funktionierendes Statement entsteht (woher kommen number_a, number_b, …?) und weil ich die rote Spalte als (einzige) neue Spalte inerpretiere meine Vermutung:
Es ist riecht nach Running Total (oder absolut) mit Partitions.
@pogomips, 10 Zeilen natürlich hast recht. Die zwischensummen 1bis 10, 11 bis 20, 21 bis 30 sind für sich gesehen nicht das Problem, mein Problem
kommt beim erstellen des Subselects mit dem Berechnen der timestamp differenz, das ja dank der Hilfe von akretschmer auch funktioniert.
numper_a, number_b sind paralell abfragen zur differenzberechnung der timestamps ( hab die in min und sec gewandelt)
ahhh so.
Also mal als Demo:
test=*# create table demo(i int, val int);
CREATE TABLE
test=*# insert into demo select s, random()*1000 from generate_series(1,30) s;
INSERT 0 30
test=*# commit;
COMMIT
test=# select * from demo;
i | val
----+-----
1 | 641
2 | 468
3 | 580
4 | 186
5 | 252
6 | 876
7 | 19
8 | 155
9 | 156
10 | 516
11 | 396
12 | 309
13 | 190
14 | 868
15 | 667
16 | 944
17 | 923
18 | 701
19 | 145
20 | 989
21 | 387
22 | 605
23 | 951
24 | 628
25 | 118
26 | 521
27 | 615
28 | 693
29 | 646
30 | 672
(30 rows)
und nun suchst Du:
test=*# select i/10 as c, sum(val) from demo group by i/10 order by i/10;
c | sum
---+------
0 | 3333
1 | 5659
2 | 6153
3 | 672
(4 rows)
Ich bekomm es nicht auf die Reihe
Das sind die Daten aus 2 Tabellen
Tabelle1 mit den Spalten: “shooters_id-2”,“name”,“session_id”
Tabelle2 mit den Spalten: "decimal_score,“session_id”,“shooters_id”,“sequence”,“series”,“timestamp”,“number”
decimal_score,“session_id”,“shooters_id”,“sequence”,“series”,“timestamp”,“number”,“shooters_id-2”,“name”
10.6,“6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584”,2,1,0,“1546022384672”,1,“2”,“Maier”
10.4,“6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584”,2,1,0,“1546022416536”,2,“2”,“Maier”
10.6,“6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584”,2,1,0,“1546022444453”,3,“2”,“Maier”
10.8,“6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584”,2,1,0,“1546022469674”,4,“2”,“Maier”
10.3,“6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584”,2,1,0,“1546022496027”,5,“2”,“Maier”
10.4,“6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584”,2,1,0,“1546022523525”,6,“2”,“Maier”
10.5,“6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584”,2,1,0,“1546022548664”,7,“2”,“Maier”
10.6,“6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584”,2,1,0,“1546022579722”,8,“2”,“Maier”
10.5,“6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584”,2,1,0,“1546022607972”,9,“2”,“Maier”
10.4,“6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584”,2,1,0,“1546022683246”,10,“2”,“Maier”
10.8,“6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584”,2,2,1,“1546022721278”,11,“2”,“Maier”
10,“6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584”,2,2,1,“1546022823407”,12,“2”,“Maier”
10.3,“6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584”,2,2,1,“1546022858316”,13,“2”,“Maier”
10.9,“6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584”,2,2,1,“1546022884652”,14,“2”,“Maier”
10.6,“6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584”,2,2,1,“1546022917245”,15,“2”,“Maier”
10.2,“6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584”,2,2,1,“1546022948144”,16,“2”,“Maier”
10.6,“6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584”,2,2,1,“1546022984577”,17,“2”,“Maier”
10.5,“6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584”,2,2,1,“1546023015354”,18,“2”,“Maier”
10.6,“6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584”,2,2,1,“1546023047985”,19,“2”,“Maier”
10.7,“6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584”,2,2,1,“1546023075754”,20,“2”,“Maier”
10.3,“6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584”,2,3,2,“1546023105530”,21,“2”,“Maier”
10.2,“6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584”,2,3,2,“1546023134703”,22,“2”,“Maier”
9.9,“6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584”,2,3,2,“1546023159610”,23,“2”,“Maier”
10.7,“6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584”,2,3,2,“1546023188783”,24,“2”,“Maier”
10.5,“6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584”,2,3,2,“1546023213607”,25,“2”,“Maier”
9.9,“6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584”,2,3,2,“1546023240742”,26,“2”,“Maier”
10.7,“6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584”,2,3,2,“1546023270551”,27,“2”,“Maier”
10.6,“6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584”,2,3,2,“1546023298196”,28,“2”,“Maier”
10.2,“6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584”,2,3,2,“1546023325311”,29,“2”,“Maier”
10.6,“6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584”,2,3,2,“1546023353687”,30,“2”,“Maier”
mein Endziel
name, number_a, number_b,zwischensumme, gesamtsumme, zeit
“Maier” “1” “10” “105.1” “313.9” “00:04:59”
“Maier” “11” “20” “105.2” “313.9” “00:05:54”
“Maier” “21” “30” “103.6” “313.9” “00:04:08”
vielleicht ist es so übersichtlicher und nachvollziehbarer was ich meine
Also, wenn das Deine Tabelle sei, die zweite, ich nenne sie mal T2:
test=*# select * from t2;
decimal_score | session_id | shooters_id | sequence | series | timestamp | number | shooters_id_2 | name
---------------+----------------------------------------------------+-------------+----------+--------+---------------+--------+---------------+-------
10.6 | 6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584 | 2 | 1 | 0 | 1546022384672 | 1 | 2 | Maier
10.4 | 6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584 | 2 | 1 | 0 | 1546022416536 | 2 | 2 | Maier
10.6 | 6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584 | 2 | 1 | 0 | 1546022444453 | 3 | 2 | Maier
10.8 | 6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584 | 2 | 1 | 0 | 1546022469674 | 4 | 2 | Maier
10.3 | 6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584 | 2 | 1 | 0 | 1546022496027 | 5 | 2 | Maier
10.4 | 6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584 | 2 | 1 | 0 | 1546022523525 | 6 | 2 | Maier
10.5 | 6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584 | 2 | 1 | 0 | 1546022548664 | 7 | 2 | Maier
10.6 | 6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584 | 2 | 1 | 0 | 1546022579722 | 8 | 2 | Maier
10.5 | 6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584 | 2 | 1 | 0 | 1546022607972 | 9 | 2 | Maier
10.4 | 6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584 | 2 | 1 | 0 | 1546022683246 | 10 | 2 | Maier
10.8 | 6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584 | 2 | 2 | 1 | 1546022721278 | 11 | 2 | Maier
10 | 6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584 | 2 | 2 | 1 | 1546022823407 | 12 | 2 | Maier
10.3 | 6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584 | 2 | 2 | 1 | 1546022858316 | 13 | 2 | Maier
10.9 | 6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584 | 2 | 2 | 1 | 1546022884652 | 14 | 2 | Maier
10.6 | 6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584 | 2 | 2 | 1 | 1546022917245 | 15 | 2 | Maier
10.2 | 6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584 | 2 | 2 | 1 | 1546022948144 | 16 | 2 | Maier
10.6 | 6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584 | 2 | 2 | 1 | 1546022984577 | 17 | 2 | Maier
10.5 | 6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584 | 2 | 2 | 1 | 1546023015354 | 18 | 2 | Maier
10.6 | 6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584 | 2 | 2 | 1 | 1546023047985 | 19 | 2 | Maier
10.7 | 6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584 | 2 | 2 | 1 | 1546023075754 | 20 | 2 | Maier
10.3 | 6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584 | 2 | 3 | 2 | 1546023105530 | 21 | 2 | Maier
10.2 | 6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584 | 2 | 3 | 2 | 1546023134703 | 22 | 2 | Maier
9.9 | 6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584 | 2 | 3 | 2 | 1546023159610 | 23 | 2 | Maier
10.7 | 6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584 | 2 | 3 | 2 | 1546023188783 | 24 | 2 | Maier
10.5 | 6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584 | 2 | 3 | 2 | 1546023213607 | 25 | 2 | Maier
9.9 | 6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584 | 2 | 3 | 2 | 1546023240742 | 26 | 2 | Maier
10.7 | 6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584 | 2 | 3 | 2 | 1546023270551 | 27 | 2 | Maier
10.6 | 6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584 | 2 | 3 | 2 | 1546023298196 | 28 | 2 | Maier
10.2 | 6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584 | 2 | 3 | 2 | 1546023325311 | 29 | 2 | Maier
10.6 | 6518b6b0-9ce1-492a-a1e4-32118d4b91b6-1546021854584 | 2 | 3 | 2 | 1546023353687 | 30 | 2 | Maier
(30 rows)
test=*#
dann komme ich (fast) auf Dein “Endziel”:
test=*# select name, ((number-1) / 10)*10+1 as number_a, ((number-1) / 10)*10+10 as number_b, sum(decimal_score) as zwischensumme, (select sum(decimal_score) from t2) gesamtsumme,(max(timestamp) - min(timestamp))/1000 * '1second'::interval as zeit from t2 group by 1,2,3;
name | number_a | number_b | zwischensumme | gesamtsumme | zeit
-------+----------+----------+---------------+-------------+----------
Maier | 1 | 10 | 105.1 | 313.9 | 00:04:58
Maier | 11 | 20 | 105.2 | 313.9 | 00:05:54
Maier | 21 | 30 | 103.6 | 313.9 | 00:04:08
(3 rows)
test=*#
das “fast”, weil Du offenbar einen Rechnenfehler mit Deinen völlig kaputten Timestamps hast, von 1-10 sind es 00:04:58, nicht 00:04:59
Gute Nacht!
Hurra, so findet das Jahr doch noch ein gutes Ende
Junger Mann du bist echt der Hammer gelernt ist eben gelernt, hätte ich so nie hinbekommen!!
Gruß Simar