Maximalwert einer Serie mit einer Variablen begrenzen

Hi,

seit langem habe schreibe ich hier mal wieder.

Folgende Abfrage beschäftigt mich zur Zeit:

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

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:

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:

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?

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.

Hrm.

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=*#

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