# speziell Auslesen aus Datenbank



## MQue (8. Jun 2009)

Hallo,

ich habe eine Tabelle welche so aufgebaut ist:


```
zeit [Timestamp]  |  wert [Float]
```

jetzt frage ich z.B.: die Daten zwischen 1.1.2009 und 1.2.2009 ab, das klappt super,
was ich jetzt machen möchte ist, wenn ich z.B.: den Zeitbereich 14.2.2009 bis 15.2.2009 abfrage und ich bekomme keine Daten zurück, dann sollen mir 

-> das letzte Tupel vor dem 14.2.2009 und das erste Tupel nach dem 15.2.2009 ausgegeben werden

Meine Frage wäre jetzt, wie ich das am Besten machen kann, würdet ihr da eine UDF (User defined Funktion) in der DB machen, Trigger oder Procedure oder wie kann man das am Besten realisieren?


Vielen Dank,
lg


----------



## bronks (8. Jun 2009)

Kann es vorkommen, daß je Timestamp mehrere Werte vorhanden sein können?

Welche Datenbank läuft bei Dir?


----------



## MQue (8. Jun 2009)

bronks hat gesagt.:


> Kann es vorkommen, daß je Timestamp mehrere Werte vorhanden sein können?
> 
> Welche Datenbank läuft bei Dir?



Hallo,

nein, das kann nicht sein, da hab ich einen CONSTRAINT auf meine Tabelle,
ich verwende FireBird 2.1

lg


----------



## bronks (9. Jun 2009)

Michael1234 hat gesagt.:


> ... nein, das kann nicht sein, da hab ich einen CONSTRAINT auf meine Tabelle,
> ich verwende FireBird 2.1 ...


Firebird sollte das können.

Das ganze könnte ca. so aussehen:



```
cursor = select count(*) as anzahl tabelle where zeit between '1.1.2009' and '1.2.2009'

if(erste Zeile in cursor > 0)
   select zeit, wert from tabelle where zeit between '1.1.2009' and '1.2.2009'
else
  select top 1 zeit, wert from tabelle where zeit < '1.1.2009' order by zeit desc
  union
  select top 1 zeit, wert from tabelle where zeit > '1.2.2009' order by zeit asc
endif
```


----------



## MQue (9. Jun 2009)

ok, also nochmal kurz, top holt nur einen Wert raus? (hab ich eigentlich noch nie gesehen)
aber werds gleich mal ausprobieren,

Vielen Dank,


----------



## bronks (9. Jun 2009)

Michael1234 hat gesagt.:


> ... top holt nur einen Wert raus? ...


Top holt den ersten Spitzenwert raus. Sollten im Feld [zeit] zwei Sätze mit gleichem Timestamp vorhanden sein, dann würdest Du 2 Sätze zurückgeliefert bekommen, wenn diese an der Spitze stehen.


----------

