Maximalwert einer Serie mit einer Variablen begrenzen

Probleme und Fragen zum Thema Trigger und Funktionen.
Antworten
schweitzerili
Benutzer
Beiträge: 59
Registriert: Di 13. Okt 2015, 09:35

Maximalwert einer Serie mit einer Variablen begrenzen

Beitrag von schweitzerili » Mo 29. Apr 2019, 15:26

Hi,

seit langem habe schreibe ich hier mal wieder.

Folgende Abfrage beschäftigt mich zur Zeit:

Code: Alles auswählen

With werte As (
select a.* from crack a, datenstromtp3 b
where b.messfahrtid=12 and b.id=a.datenstromtp3id
order by a.lfdm
)
Select generate_series(min(lfdm),max(lfdm),100) As bereich
  From werte;
Zum Hintergrund:

Es wird versucht, eine Auswertung der oben erfassten Daten mit entsprechenden Skripten zu veranlassen. Dies soll erst später passieren.
Zunächst muss eine Auswahl der entsprechenden Daten gtroffen werden. Dazu muss die Auswahl begrenzt werden. Nämlich auf 2km.
Im obigen Beispiel sind 3500m Messtrecke erfasst und jede einzelne Zeile entspricht einem Meter und ist mit einer Spalte lfdm gekennzeichnet. Von diesen 3,5km benötigen wir aber nur 2km. Und diese fangen nicht zwangsläufig bei 0 an.
Ich bin quasi auf der Suche nach einer Möglichkeit den Max-Wert der Serie auf 2000m von dem Startwert aus zu begrenzen.
Mathematisch ganz einfach: Startwert+2000=Endwert.
Ich komme nur nicht bei der generate_serie in postgresql weiter. Kennt da jemand eine Funktion oder Umschreibung um das zu realisieren oder eventuell auch eine ganz andere Herangehensweise.
Wichtig ist, dass der Startwert frei wählbar bleibt.

Danke schon mal im Voraus

Gruß

Schweitzer

akretschmer
Erfahrener Benutzer
Beiträge: 7613
Registriert: So 29. Okt 2006, 13:35
Wohnort: Kaufbach, Sachsen, Germany, Germany
Kontaktdaten:

Re: Maximalwert einer Serie mit einer Variablen begrenzen

Beitrag von akretschmer » Mo 29. Apr 2019, 15:47

ich weiß nicht, ob ich Dich korrekt verstanden habe, aber vielleicht suchst Du einen LATERAL JOIN. Angenommen, Du hast eine Tabelle foo mit diesen Werten:

Code: Alles auswählen

test=*# select * from foo;
 i 
---
 3
 5
 8
(3 rows)
und möchstes für jede Zeile davon mittels generate_Series die Werte zwischen i und i+3 ermitteln:

Code: Alles auswählen

test=*# select * from foo left join lateral (select * from generate_series(foo.i, foo.i + 3)) bla on true;
 i | generate_series 
---+-----------------
 3 |               3
 3 |               4
 3 |               5
 3 |               6
 5 |               5
 5 |               6
 5 |               7
 5 |               8
 8 |               8
 8 |               9
 8 |              10
 8 |              11
(12 rows)
Hilft das?
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

schweitzerili
Benutzer
Beiträge: 59
Registriert: Di 13. Okt 2015, 09:35

Re: Maximalwert einer Serie mit einer Variablen begrenzen

Beitrag von schweitzerili » Mo 29. Apr 2019, 16:07

Hi,

nein leider nicht. Aber die Richtung ist gut.
Ich versuche im Prinzip, um noch tiefer reinzugehen, 100m-Blöcke in einer Tabelle zu generieren (um danach daraus Werte zu berechnen) auf einem Gesamtabschnitt von 2000m. Jeder Meter ist wie gesagt eine Zeile. Es gibt eine Spalte laufender Meter (lfdm). Insgesamt ist die ganze Tabelle aber wesentlich größer. Das können 3500m sein oder auch 14000m sein.
Für diese Eigenüberwachung möchte ich aber eben nur 2000 m verwenden und diese auch noch in 100m Blöcke aufgeteilt und auch noch unabhängig vom Startpunkt (also vielleicht geht die Eigenüberwachung diesmal erst bei 400m los. Dann brauche ich alle Werte in 100m Blöcken von 400 bis 2400)

Ich brauche quasi etwas, was mir automatisch den Maxwert aus dem eingegebenen Minwert erzeugt. Ich hab schon an eine Sequenz gedacht, aber irgendwie erschien mir das wie mit Elefanten auf Spatzen zu schießen.

akretschmer
Erfahrener Benutzer
Beiträge: 7613
Registriert: So 29. Okt 2006, 13:35
Wohnort: Kaufbach, Sachsen, Germany, Germany
Kontaktdaten:

Re: Maximalwert einer Serie mit einer Variablen begrenzen

Beitrag von akretschmer » Mo 29. Apr 2019, 16:38

Hrm.

Code: Alles auswählen

test=*# with start as (select 10 as start) select generate_series(start.start, start.start+10) from start ;
 generate_series 
-----------------
              10
              11
              12
              13
              14
              15
              16
              17
              18
              19
              20
(11 rows)

test=*# with start as (select 30 as start) select generate_series(start.start, start.start+10) from start ;
 generate_series 
-----------------
              30
              31
              32
              33
              34
              35
              36
              37
              38
              39
              40
(11 rows)

test=*# 
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

schweitzerili
Benutzer
Beiträge: 59
Registriert: Di 13. Okt 2015, 09:35

Re: Maximalwert einer Serie mit einer Variablen begrenzen

Beitrag von schweitzerili » Di 30. Apr 2019, 07:56

SIeht merkwürdig aus, ist aber genau das was ich suche. THX

Antworten