Maximaler Wert eines Feldes - über alle Datensätze
Guten Morgen zusammen,
in einem Datensatz habe ich ein Feld, welches nach bestimmten Kriterien eine eindeutige Nummer sein soll. Es geht um eine Datenbank, welche Touren für Aktivitäten vorhält.
Dieses Feld sieht zB so aus:
Tour-ID = 241201
Tour-ID = 241202
…
Tour-ID = 241248
Tour-ID = 250101
24 und 25 = Jahr
12 und 01 = Monat
01,02, … 48 = die Nummer der Tour, welche ich in diesem Monat erstellt habe, hier dann die letzte mit der 48 im Dezember, was bedeutet, dass ich im Dezember 48 Touren erstellt habe und im Januar (Folgejahr) bereits eine Tour erstellt habe.
Der maximale Wert dieses Feldes (hier 250101) soll nun global in allen Datensätzen verfügbar sein, als Hinweis sozusagen.
- Hinweis: Dieses Feld ist historisch bedingt ein Textfeld, welches ich immer manuell befüllt, also manuell eingegeben habe.
- Hinweis: Es wird nicht in jedem Datensatz dieses Feld ausgefüllt, daher ist die Eingabe „manuell“.
Frage:
Besteht die Möglichkeit, den maximalen Wert dieses Feldes global (zB. als Formel) in einem Datensatz anzeigen zu lassen?
Bsp:
Wenn ich nun einen neuen Datensatz erstelle, dann sollte die letzte „maximale“ Tour-ID angezeigt werden, basierend der Beispiele oben, dann die 250101. Wenn ich nun die nächste Tour erstelle und Tour-Nummer eingebe, wüsste ich, dass diese 250102 sein müsse, da ja die 250101 mit angezeigt wird.
Beim nächsten Datensatz, den ich anlege, würde ich dann die 250102 angezeigt bekommen und ich wüsste, dass ich dann die 250103 eingeben müsste.
Herzlichen Dank vorab für Eure Unterstützung und noch angenehme Feiertage.
Viele Grüße, Hans
6 Antworten
-
Frohe Weihnachten!
An deiner Stelle würde ich folgendermaßen vorgehen. Ein Formelfeld mit folgendem Code - es gibt es sicher in schöner programmiert, aber so sollte es funktionieren.
let filtera := max((select Tabelle1).substr('Tour-ID', 0, 2)); let filterb := max((select Tabelle1 where substr('Tour-ID', 0, 2) = filtera).substr('Tour-ID', 2, 2)); let filterc := max((select Tabelle1 where substr('Tour-ID', 0, 4) = text(filtera) + text(filterb)).substr('Tour-ID', 4, 2)); text(filtera) + text(filterb) + text(filterc)
Wobei ich noch zwei Optimierungen sehe (aber hier eine generelle Antwort geben wollte)
- Du willst doch eigentlich die höchste Zahl des aktuellen Monats, oder? -> geht also eleganter
- Du könntest, falls notwendig, die Performance noch steigern, in dem du die select noch ersetzt - aber in deinem Fall klingt es nicht so, als ob du hier zehntausende Datensätze durchsuchen musst.Beste Grüße, Peter
-
Hallo Peter,
Danke für Deine schnelle Rückmeldung und Deinen Tipp. Leider habe ich es so nicht zum Laufen gebracht, jedoch mit Deiner Vorgabe dann schon …
Es wurde immer "YYMMxx"" angezeigt. Dies war zu bis heute mein „Standardwert“ in dem Feld. Auch nach dem Löschen des Standardwertes veränderte sich leider nichts.
Dann habe ich die Idee gehabt und die Werte des Textfeldes als Nummer auszugeben:
Feldname: Tour-ID_als_Zahl Formel: number(Tour-ID)
Mit dieser Nummer konnte ich dann über die Formel:
max((select G_Route).'Tour-ID_als_Zahl')
herausbekommen ;-) Die Idee kam über Deinen Ansatz:
… max((select Tabelle1).substr('Tour-ID', 0, 2)) …
Danke Dir vielmals für Deine Unterstützung und noch angenehme Feiertage.
Viele Grüße, Hans
-
Eine kleine Anmerkung aus Erfahrung. Mit steigender zahl an Records machst du dir die Performanz über Formelfelder kaputt. Das fällt besonders dann auf, wenn du die Tabellenansicht aufrufen musst.
Daher rate ich dir so etwas immer "fest" schreiben zu lassen, z. B. über den Trigger vor Anzeige in der Registerkarte, so hast du denselben Erfolg, aber Ninox muss nicht jeden Record neu berechnen.
Content aside
- Status Answered
- vor 2 WochenZuletzt aktiv
- 6Antworten
- 70Ansichten
-
3
Folge bereits