Skip to main content

Moving Average Postgresql

In einer Datenbank von Transaktionen, die 1.000er Unternehmen über 18 Monate umfassen, möchte ich eine Abfrage ausführen, um jede mögliche 30-Tage-Periode von entityid mit einem SUM ihrer Transaktionsbeträge und COUNT ihrer Transaktionen in diesem 30-Tage-Zeitraum zu gruppieren, Und die Daten auf eine Weise zurückgeben, die ich dann abfragen kann. Nach einer Menge von Tests, führt dieser Code viel von dem, was ich will: Und ich werde in einer größeren Abfrage strukturiert so etwas wie: Der Fall, dass diese Abfrage nicht abdeckt, wenn die Transaktion zählt würde mehrere Monate, aber immer noch innerhalb von 30 Tagen von einander. Ist diese Art von Abfrage möglich mit Postgres Wenn ja, freue ich mich über jede Eingabe. Viele der anderen Themen diskutieren laufende Aggregate, nicht Rolling. Das CREATE TABLE-Skript: Ideale Ausgabe würde SUM (Betrag) und COUNT () aller Transaktionen über einen rollierenden 30-Tage-Zeitraum enthalten. Siehe dieses Bild, zum Beispiel: Die grüne Datumshighlighting zeigt an, was von meiner Abfrage aufgenommen wird. Die gelbe Zeile Hervorhebung zeigt Aufzeichnungen, was ich möchte, um Teil des Satzes zu werden. Durch jede mögliche 30-tägige Periode von entityid bedeutet, dass die Periode jeden Tag beginnen kann, also 365 mögliche Perioden in einem (nicht sprunghaften) Jahr Oder wollen Sie nur Tage mit einer tatsächlichen Transaktion als Beginn einer Periode einzeln für jeden betrachten Entityid. Bitte geben Sie Ihre Tabellendefinition, Postgres-Version, einige Beispieldaten und das erwartete Ergebnis für die Stichprobe an. Ndash Erwin Brandstetter In der Theorie meinte ich jeden Tag, aber in der Praxis gibt es keine Notwendigkeit, Tage zu berücksichtigen, wo es keine Transaktionen gibt. Ich habe die Beispieldaten und die Tabellendefinition gepostet. Ndash tufelkinder Jul 20 15 am 14:50 So wollen Sie sammeln Zeilen der gleichen Entityid in einem 30-Tage-Fenster beginnend bei jeder tatsächlichen Transaktion. Gibt es mehrere Transaktionen für das gleiche (transdate, entityid) oder ist diese Kombination eindeutig definiert? Ihre Tabellendefinition hat keine UNIQUE - oder PK-Einschränkung, aber Einschränkungen fehlen. Ndash Erwin Brandstetter Die Frage, die Sie haben Sie könnten Ihre Abfrage mit einer WINDOW-Klausel zu vereinfachen, aber das ist nur die Verkürzung der Syntax, nicht die Änderung der Abfrage Plan. Auch mit dem etwas schnelleren count (). Da id ist definitiv definiert NOT NULL Und Sie brauchen nicht, um von Entityid ORDER Bestellen, da Sie bereits PARTITION Entityid Sie können noch weiter vereinfachen: Dont hinzufügen ORDER BY auf die Fenster-Definition überhaupt, seine nicht relevant für Ihre Anfrage. Dann müssen Sie nicht definieren, eine benutzerdefinierte Fensterrahmen, entweder: Simpler, schneller, aber immer noch nur eine bessere Version von dem, was Sie haben. Mit statischen Monaten. Die Abfrage, die Sie wünschen, ist nicht klar definiert, also baue ich auf diesen Annahmen auf: Zählen Sie Transaktionen und Betrag für jede 30-Tage-Periode innerhalb der ersten und letzten Transaktion jeder Entityid. Ausschluss von führenden und nachlaufenden Perioden ohne Aktivität, aber alle möglichen 30-Tage-Perioden innerhalb dieser äußeren Grenzen. Dies listet alle 30-Tage-Perioden für jede Entityid mit Ihren Aggregaten und mit transdate ist der erste Tag (einschließlich) der Periode. Um Werte für jede einzelne Zeile zu erhalten, verbinden Sie sich erneut mit der Basistabelle. Die grundlegende Schwierigkeit ist die gleiche wie hier: Die Frame-Definition eines Fensters kann nicht von den Werten der aktuellen Zeile abhängen. Die Abfrage, die Sie wirklich wollen Nach der Frage zu aktualisieren und Diskussion: Sammeln Sie Zeilen der gleichen Entityid in einem 30-Tage-Fenster beginnend bei jeder tatsächlichen Transaktion. Da Ihre Daten spärlich verteilt werden, sollte es effizienter sein, eine Selbstverknüpfung mit einer Bereichsbedingung auszuführen. Umso mehr, da Postgres 9.1 noch keine LATERAL-Joins hat: Ein rollendes Fenster könnte nur sinnvoll (in Bezug auf Leistung) mit Daten für die meisten Tage sein. Dabei werden keine Duplikate auf (transdate, entityid) pro Tag zusammengefasst, aber alle Zeilen desselben Tages sind immer im 30-Tage-Fenster enthalten. Für einen großen Tisch, könnte eine Deckung Index wie dies ein ganzes bisschen helfen: Die letzte Spalte Betrag ist nur sinnvoll, wenn Sie nur Index-Scans aus ihm. Else fallen lassen. Aber es wird nicht verwendet werden, während Sie die ganze Tabelle auswählen. Es wäre Anfragen für eine kleine subset. Metrics Maven unterstützen: Ein gleitender Durchschnitt in PostgreSQL In unserer Metrics Maven Serie Rechnen, Komponiert Funktionen Aktien Datenbank Daten Wissenschaftler, Tipps, Tricks und Code, den Sie die Metriken verwenden, können Sie aus Ihren Daten benötigen. Lesen Sie in diesem Artikel, wie Sie einen gleitenden Durchschnitt in PostgreSQL berechnen. Dieser Artikel basiert auf unseren beiden letzten Artikeln über Fensterfunktionen und Fensterrahmen in PostgreSQL. Nun nutzen Sie die Fenster-Funktionen weve zuvor diskutiert, um einen gleitenden Durchschnitt zu berechnen und auch auf eine alternative Methode. Was ist ein gleitender Durchschnitt Ein gleitender Durchschnitt ist genau das, was es klingt wie - ein Durchschnitt, der ständig auf der Grundlage der sich ändernden Eingabe bewegt. Beispielsweise möchten Sie vielleicht den Durchschnitt von einem Wert für die Top 100 Einträge oder für die letzten 30 Tage zu nehmen. Da Sie neue Einträge in Ihre Datenbank erhalten oder weil jeder neue Tag ein anderes Datum ist, ändert sich der Durchschnitt. Der Begriff gleitenden Durchschnitt ist auch gleichbedeutend mit rollenden durchschnittlichen oder laufenden Durchschnitt, aber es gibt ein paar verschiedene Arten von gleitenden Durchschnitten. In diesem Artikel wurden auf den einfachen gleitenden Durchschnitt konzentrieren, um unsere Füße nass und gut auch kurz den kumulativen gleitenden Durchschnitt am Ende des Artikels. Ein zukünftiger Artikel deckt gewichtete und exponentielle gleitende Durchschnitte. Der Grund, einen gleitenden Durchschnitt für Ihre Metriken zu verwenden, besteht darin, die Erfassung von Trends zu erleichtern. Es ist eine häufig verwendete Technik in der Finanz-und Business-Analytik zu glätten Dips und Spikes, die in den Daten auftreten, so dass echte Trends über die sich ändernde Serie identifiziert werden können. Herauszufinden, wie die Berechnung als die Datenänderungen durchführen kann ein wenig entmutigend, aber wenn Sie es nie getan haben. Sobald Sie eine Methode, die Sie mögen lernen, obwohl, (gut decken zwei) seine leicht zu tun und youll finden viele Verwendungen für sie in Ihrem Tracking und Berichte. Lasst uns anfangen. Erste Dinge zuerst: gut brauchen eine Tabelle, die die Werte, die wir wollen durchschnittlich enthält. In der Praxis bei Compose, finden wir oft, dass die Basisdaten, die wir benötigen, nicht bereits ordentlich in einer Tabelle definiert sind. Aus diesem Grund haben wir ein paar Aggregat-Tabellen, die die Daten, die wir zusammen brauchen zu ziehen. Dies sind die Basistabellen, auf die wir fortgeschrittenere Berechnungen anwenden, wie einen gleitenden Durchschnitt. In einigen Fällen handelt es sich dabei um abgeleitete Tabellen, die vorübergehend für die Ausführung der Hauptabfrage existieren. In anderen Fällen können wir eine Ansicht oder eine materialisierte Ansicht verwenden. Also, wie Sie es bekommen, benötigen Sie eine Tabelle mit den Werten, die Sie durchschnittlich möchten und welche Dimension (en) Sie die Daten durch bestellen möchten. Für unser Beispiel, sagen wir weve wurde gebeten, einen 30-Tage-rollenden Durchschnitt für App-Downloads von Beispiel zu erstellen. Die App-Download-Daten wird täglich auf eine Tabelle mit dem Namen appdownloadsbydate und der jüngste Teil davon sieht so aussehen: In diesem Beispiel, Wird die Reihenfolge nach Datum wichtig sein, da wir einen 30-tägigen Rollendurchschnitt über die vorangegangenen Datenreihen berechnen wollen. Aus diesem Grund ist es wichtig, dass wir für jedes Datum eine Zeile haben. In unserem Fall tun wir, aber wenn Sie Lücken in Ihren Daten, wo es keine Werte für bestimmte Termine, können Sie generateseries beim Erstellen Ihrer Basistabelle, um sicherzustellen, dass Sie alle Zeilen youll benötigen. Beachten Sie, wie diese Reihe von Daten enthält fluctuating App-Downloads von 35 bis 7. Sein sehr schwierig, einen Trend aus diesen Daten zu sehen: Geben Sie den gleitenden Durchschnitt. Verwenden von Fensterrahmen für einen einfachen gleitenden Durchschnitt Wenn Sie aus unserem vorherigen Artikel in dieser Serie zu erinnern. Werden Fensterrahmen verwendet, um die Anzahl der Zeilen um die aktuelle Zeile anzuzeigen, die die Fensterfunktion enthalten soll. Sie erstellen eine Teilmenge von Daten für die Fenster-Funktion zu bedienen. Abhängig von Ihren Daten und Ihren Anforderungen kann Ihre gleitende Durchschnittsberechnung Zeilen vor und nach der aktuellen Zeile enthalten, aber für unsere Zwecke wird unser gleitender Durchschnitt die vorherigen Zeilen und die aktuelle Zeile verwenden, weil wir einen neuen gleitenden Mittelwert für generieren möchten Jedes neue Datum. Unsere Abfrage sieht folgendermaßen aus: Wurden ORDER BY auf unserem Datumsfeld verwendet, um sicherzustellen, dass unsere Daten in der von uns erwarteten Reihenfolge sein werden und wir haben angegebene ROWS ZWISCHEN 29 PRECEDING und CURRENT ROW, um den Fensterrahmen für die AVG-Berechnung einzustellen. Da der Fensterrahmen für jedes Datum fortschreitet, werden nur die vorherigen 29 Zeilen und die aktuelle (30 Tage) für die Berechnung verwendet: Da wir in diesem Fall die Daten in unserer Basistabelle vor dem 26. Mai für dieses Beispiel zeigen, Der Ergebnisse zu den Daten, an denen wir Ihnen die 29 vorhergehenden Zeilen gezeigt haben. Nehmen wir zum Beispiel den 30. Juni. Unser Fensterrahmen fokussiert unsere AVG-Aggregation auf die App-Downloads ab Juni nur diesen Teil unserer Basistabelle: So, jetzt, wenn wir das Rolling Average Weve berechnet, können wir sehen, dass die Daten geglättet und es gibt einen Aufwärtstrend Durch die erste Woche im Juni, dann eine volatilere Abwärtstrend nach, dass: Da dies zeigt nur einen Monat Daten ist es nicht sehr für einen analytischen Bericht zu erzählen, aber hoffentlich hilft es Ihnen zu verstehen, wie die Berechnung eines gleitenden Durchschnitt kann nützlich für die Wirtschaft sein Analyse. Ein Tipp auf nicht einschließlich der aktuellen Zeile Wenn aus irgendeinem Grund Sie nicht möchten, dass die aktuelle Zeile für Ihre Fenster-Funktion und youre mit nur PRECEDING oder nur FOLLOWING-Einstellungen für Ihren Fensterrahmen, eine einfache Möglichkeit zu tun, die zu verwenden ist x PRECEDING oder Y FOLGEN Sie zweimal in Ihren ROWS ZWISCHEN. Klausel. Zum Beispiel sagen wir, wir wollten 30 Zeilen vor unserer aktuellen Zeile verwenden, aber nicht die aktuelle Zeile in den Fensterrahmen. Wir könnten schreiben, dass Klausel wie folgt: ZEITEN ZWISCHEN 30 PRECEDING UND 1 PRECEDING. Ebenso können wir die aktuelle Zeile ausschließen, jedoch 30 Zeilen wie folgt ausführen: ROWS BETWEEN 1 FOLLOWING und 30 FOLLOWING. Eine alternative Methode für einen einfachen gleitenden Durchschnitt Vor PostgreSQL 9.0, hatten wir nicht die x PRECEDING oder y FOLLOWING Fensterrahmen Optionen zur Verfügung. Um einen gleitenden Durchschnitt ohne Verwendung eines Fensterrahmens zu berechnen, können wir stattdessen zwei Tabellenaliasnamen aus unserer Basistabelle verwenden. Nun verwenden Sie einen Alias ​​zu bedienen über die andere mit einem Datum Intervall. Check it out: Mit dieser Methode können wir die gleichen Ergebnisse erzielen, wie oben mit dem Fensterrahmen beschrieben. Wenn Sie über große Datenmengen arbeiten, wird die Fensterrahmenoption effizienter, aber diese Alternative ist vorhanden, wenn Sie sie verwenden möchten. Berechnung eines kumulativen gleitenden Durchschnitt Nun, dass Weve überprüft ein paar Methoden, wie man einen einfachen gleitenden Durchschnitt zu berechnen, gut schalten Sie unsere Fensterrahmen Beispiel, um zu zeigen, wie Sie auch einen kumulativen gleitenden Durchschnitt. Die gleichen Prinzipien gelten, aber anstatt mit einem ständig wechselnden Fensterrahmen für ein Intervall, erstreckt sich der Fensterrahmen einfach. Zum Beispiel, anstatt zu tun, einen 30-Tage-Rolling Durchschnitt, würde ein Jahr-to-date gleitenden Durchschnitt zu berechnen. Für jeden neuen Tag ist sein Wert einfach in der Durchschnittsberechnung von allen vorherigen Daten enthalten. Sehen wir uns dieses Beispiel an: Weil unsere Basistabelle ab dem 1. Januar für das laufende Jahr beginnt, wurde UNBOUNDED PRECEDING verwendet, um unseren Fensterrahmen zu setzen. Die Ergebnisse, die wir für diese kumulative Berechnung erhalten, sehen folgendermaßen aus: Wenn wir diese Ergebnisse darstellen, können Sie sehen, dass der Vorteil des kumulativen gleitenden Durchschnitts eine weitere Glättung der Daten ist, so dass sich nur signifikante Datenänderungen als Trends zeigen. Wir sehen jetzt, dass es einen leichten Aufwärtstrend Jahr-to-date: Wrapping Nun, da Sie wissen, ein paar verschiedene Arten von gleitenden Durchschnitten können Sie und ein paar verschiedene Methoden, um sie zu berechnen, können Sie mehr aufschlussreiche Analyse und mehr zu schaffen Wirksame Berichte. In unserem nächsten Metriken Maven Artikel, auch auf einige Optionen, wie Sie Daten ziemlich so, dass statt der Werte wie 20.4184782608695652, siehe auch 20.42. Sehen Sie das nächste Mal Kopie 2017 ComposePostgreSQL Berechnung eines gleitenden Durchschnitt Am Freitag, 21. Januar 2005 um 12.53.45 -0500, Greg Stark schrieb: quotVanole, Mikequot ltMike. Vanolecingulargt schreibt: Ich brauche einen gleitenden Durchschnitt zu berechnen, und ich möchte Um es mit SQL zu tun, oder eine Pg-Funktion für diesen Zweck gebaut. I39m auf Pg 7.4. Ist dies möglich in PG ohne eine Reihe von Selbst-Joins, oder gibt es eine funtion zur Verfügung Leider bewegen sich Durchschnitte fallen in eine Klasse von Funktionen, genannt analytische Funktionen (zumindest that39s, was Oracle nennt sie), die inhärent schwer zu modellieren effizient in SQL sind. Postgres doesn39t haben jede spezielle Unterstützung für diese Reihe von Funktionen, so you39re stecken es die ineffiziente Möglichkeiten, die Standard-SQL erlaubt. Ich denke, das ist auch schwer zu implementieren korrekt mit Postgres39s extrem erweiterbar Funktion unterstützen. Auch wenn Sie es implementiert in Perl oder Python Ich don39t think there39s jede Möglichkeit, einen temporären statischen Speicherbereich für eine gegebene Call-Site zuzuordnen. Daher würde sich Ihre gleitende Durchschnittsfunktion merkwürdig verhalten, wenn Sie sie in einer gegebenen Abfrage zweimal aufgerufen haben. Aber wenn Sie innerhalb dieses Vorbehalts arbeiten kann es einfach sein, um es effizient in Perl oder Python implementieren. Alternativ können Sie eine plpgsql-Funktion schreiben, um den spezifischen gleitenden Durchschnitt zu berechnen, den Sie benötigen, der die Auswahl selbst ausführt. Wenn Sie fühlen abenteuerlich, könnten Sie in Oracle39s Dokumentation auf ihre analytischen Funktionen zu sehen und sehen, ob Sie kommen mit etwas generischen für PostgreSQL. Auch wenn Sie nur eine gleitende Durchschnittsfunktion machen, wäre das ein guter Anfang. quotWhere wollen Sie todayquot Linux zu gehen: - Jim C. Nasby, Datenbank Consultant decibeldecibel. org einige Gehirn Süßigkeiten distributed. net-Team 1828 Windows-Geben Sie Ihrem Computer quotWhere tun Sie tomorrowquot FreeBSD gehen wollen: quotAre euch kommen, oder whatquot Greg Stark Ich denke, dass der harte Teil des Tuns sogar einer einfachen Implementierung genau der Punkt ist, den ich darlegte, um ihn in Perl oder Python zu tun. Irgendwie müssen Sie einen statischen Speicherbereich festlegen, der für die Call-Site spezifisch ist. It39s Art wie eine aggregierte Funktion aufrufen, außer natürlich, dass you39re gehen, um ein Datum für jeden Datensatz zurückzugeben. Für eine vollere Umsetzung gibt es viel mehr Details. Wenn ich richtig verstehe in Oracle Sie eine ORDER BY-Klausel und das Äquivalent einer GROUP BY-Klausel in der If If I39m grob Missverständnis des Problems Ich denke, dass ein Trigger in PLpgsql funktionieren würde gut funktionieren zu spezifizieren. Etwas wie dies: CREATE TABLE foo (fooid SERIAL Primärschlüssel, foo TEXT) CREATE TABLE bar (fooid INTEGER Referenzen foo, barid SERIAL Primärschlüssel, bar DOUBLE PRECISION nicht NULL) CREATE TABLE baravg (fooid INTEGER Primärschlüsselreferenzen foo, baravg DOUBLE PRECISION ) FUNKTION ERSTELLEN ODER ERSETZEN getbaravg () RETURNS TRIGGER ALS 39 DECLARE barrecord AUFZEICHNUNG x INTEGER y DOUBLE PRECISION: 0 BEGINN WENN TGOP 3939INSERT3939 DANN y: y NEW. bar x: 1 FÜR barrecord IN AUSWÄHLEN VON bar LOOP IF NEW. fooid barrecord. fooid DANN y: y barrecord. bar x: x 1 END IF END LOOP y: yx IF exists (FROM baravg SELECT WHERE fooid NEW. fooid) THEN baravg SET baravg. baravg y UPDATE WHERE fooid NEW. fooid ELSE IN baravg VALUES INSERT (NEU. fooid, y) END IF RETURN NEW ELSIF TGOP 3939DELETE3939 THEN x: 0 FÜR barrecord IN FROM Bar LOOP SELECT IF OLD. fooid barrecord. fooid UND OLD. barid ltgt barrecord. barid DANN y: y barrecord. bar x: x 1 END IF END LOOP IF x ltgt 0 THEN y: yx END IF UPDATE baravg SET baravg. baravg y WHERE fooid OLD RETURN OLD. fooid ELSE y: y NEW. bar x: 1 für barrecord IN FROM Bar LOOP SELECT IF OLD. barid ltgt barrecord. barid DANN y: y barrecord. bar x: x 1 END WENN END SCHLOSS y: yx UPDATE baravg SET baravg. baravg y WHERE fooid OLD. fooid RETURN NEU END WENN END 39 SPRACHE plpgsql CREATE TRIGGER getbaravg BEVOR EINFÜGEN ODER DELETE ODER UPDATE EIN Bar für jedes ROW EXECUTE-Verfahren getbaravg () Das sollte funktionieren, Quoting QuoteJim C. Nasbyquot ltdecibeldecibel. orggt: Am Fri, 21.01.2005 um 12:53:45 Uhr -0500, Greg Stark schrieb: quotVanole, Mikequot ltMike. Vanolecingulargt schreibt: Ich muss einen gleitenden Durchschnitt berechnen und ich möchte es mit oder eine Pg-Funktion für diesen Zweck gebaut. I39m auf Pg 7.4. Ist dies in PG ohne ein Bündel von Selbst-Joins, oder gibt es eine funtion verfügbar Leider bewegen sich Durchschnitte fallen in eine Klasse von Funktionen, genannt analytische Funktionen (zumindest that39s, was Oracle nennt sie), die inhärent schwer zu modellieren effizient in SQL sind. Postgres doesn39t haben jede spezielle Unterstützung für diese Reihe von Funktionen, so you39re stecken es die ineffiziente Möglichkeiten, die Standard-SQL erlaubt. Ich denke, das ist auch schwer zu implementieren korrekt mit Postgres39s extrem erweiterbar Funktion unterstützen. Auch wenn Sie es implementiert in Perl oder Python Ich don39t think there39s jede Möglichkeit, einen temporären statischen Speicherbereich für eine gegebene Call-Site zuzuordnen. Daher würde sich Ihre gleitende Durchschnittsfunktion merkwürdig verhalten, wenn Sie sie in einer gegebenen Abfrage zweimal aufgerufen haben. Aber wenn Sie innerhalb dieses Vorbehalts arbeiten kann es einfach sein, um es effizient in Perl oder Python implementieren. Alternativ können Sie eine plpgsql-Funktion schreiben, um den spezifischen gleitenden Durchschnitt zu berechnen, den Sie benötigen, der die Auswahl selbst ausführt. Wenn Sie fühlen abenteuerlich, könnten Sie in Oracle39s Dokumentation auf ihre analytischen Funktionen zu sehen und sehen, ob Sie kommen mit etwas generischen für PostgreSQL. Auch wenn Sie nur eine gleitende Durchschnittsfunktion machen, wäre das ein guter Anfang. quotWhere wollen Sie todayquot Linux zu gehen: - Jim C. Nasby, Datenbank Consultant decibeldecibel. org einige Gehirn Süßigkeiten distributed. net-Team 1828 Windows-Geben Sie Ihrem Computer quotWhere tun Sie tomorrowquot FreeBSD gehen wollen: quotAre euch kommen, oder whatquot ----------------------- (Ende der Übertragung) ------------------ --------- Tipp 2: Sie können alle Listen auf einmal mit dem austragen Befehl bekommen (senden quotunregister YourEmailAddressHerequot zu majordomopostgresql. org) Alban Hertroys ich sehe Menschen, diese von Zeit zu Zeit tun. Nur aus Neugier, ist dies als gute Kodierung Stil, oder ist es als Quotzynessquot I39m nicht sicher, was sie zu denken. Wenn ich dies geschrieben hätte, hätte es 3 Trigger beim Check auf TGOP gegeben. Gibt es ein wichtiger Nachteil zu tun so Gibt es ein Dokument auf quotpreferredquot Codierung Stil in PLPGSQL Ja, I39m ein bisschen wie ein Purist. - Grüße, Alban Hertroys MAG Productions T: 31 (0) 53 4346874 F: 31 (0) 53 4346876 E: Ich persönlich 3 separate verwenden in den meisten Fällen löst, je nachdem, wie unterschiedlich die Aktion für jede separate Aktion, it39s nur einfacher für mich und meine Leute, die Funktionen logisch zu unterscheiden Art und Weise, dass, aber das Beispiel in der 7.4-Dokumentation für Trigger wird mit der Form gegeben, dass ich diese Funktion schrieb, und nützlich ist, wenn die Trigger-Verfahren für alle drei Aktionen in etwa die gleiche tun Ding, es macht auch die Bearbeitung der Code ein wenig einfacher in dieser Situation. Zitiert von Russell Smith LTMR-russpws. augt: Am Montag, 24. Januar 2005 08.32 Uhr, Alban Hertroys schrieb: mstoryuchicago. edu schrieb: CREATE OR FUNCTION getbaravg REPLACE () RETURNS TRIGGER AS 39 DECLARE barrecord RECORD x INTEGER y DOUBLE PRECISION: 0 BEGIN WENN TGOP 3939INSERT3939 DANN y: y NEW. bar. RETURN NEU ELSIF TGOP 3939DELETE3939 DANN X: 0. RÜCKLAUF ALT y: y NEW. bar. RETURN NEUE ENDE WENN END 39 SPRACHE plpgsql Ich sehe Menschen tun dies von Zeit zu Zeit. Nur aus Neugier, ist dies als gute Kodierung Stil, oder ist es als Quotzynessquot I39m nicht sicher, was sie zu denken. Wenn ich dies geschrieben hätte, hätte es 3 Trigger beim Check auf TGOP gegeben. Gibt es ein wichtiger Nachteil zu tun so Gibt es ein Dokument auf quotpreferredquot Codierung Stil in PLPGSQL Ja, I39m ein bisschen wie ein Purist. Da Sie eine Funktion für jeden Trigger definieren müssen, ist meine Ansicht, warum schreiben Sie mehr Funktionen. Zusammen mit diesem. Als C-Programmierer würde ich ein paar weitere IF-Tests in einer Funktion zu tun, anstatt ein anderes zu schreiben. Ich finde, dass Trigger wie diese sind ein funktionaler Block und alle zusammen gehen. Dann, wenn Sie die Funktion aktualisieren, it39s alle an einem Ort. Andere können quotbetterquot Gründe haben, warum sie es tun, wie sie es tun. Aber sie gehören mir. ----------------------- (Ende der Übertragung) ------------------ --------- TIPP 7: don39t vergessen Sie Ihre freien Speicherplatz Karteneinstellungen am Mi, 26. Januar zu erhöhen, 2005 23.12.25 0100, PFC schrieb: Wie Sie tun Selbstverknüpfung auf einem subselect Wie SELECT a. xb. x FROM (subselect) a, (subselect) b WHERE a. id b. id10 aber ohne die Subselect zweimal durchzuführen. Sie müssen die Subselect zweimal schreiben, wenn Sie unterschiedliche Zeilen zusammenstellen möchten. In einigen Fällen könnte es sich lohnen, eine Kopie in einer temporären Tabelle zu erstellen. Für einfache subselects, wo es einen Index auf ID, so dass es sollte gut funktionieren.


Comments

Popular posts from this blog

International Broker Forex

Binärer Optionenhandel Einfach eine Prognose machen, ob ein Währungspaarsatz (z. B. EURUSD) steigen oder fallen wird. Eine korrekte Prognose ermöglicht es Ihnen zu verdienen Sie können Optionen mit einem Gültigkeitszeitraum von 30 Sekunden öffnen. Wenn Ihre Prognose für die Option richtig ist, wird der Gewinn davon werden bis zu 90 der investierten Mittel. Als solche, investieren 100 USD in diesem Fall sehen Sie erhalten 190 USD (Investition plus proft). Steigern Sie Ihren Gewinn mit jedem Handel Sie können noch mehr von binären Optionen verdienen, wenn Ihr Konto Pro Status hat. Um diesen Status zu erhalten, sollte der Handelsumsatz auf Ihrem alpari. binary-Konto für die letzten 7 Tage nicht weniger als 30.000 USD 30.000 EUR betragen. Nach dem Erreichen des Pro-Status erhöht sich der Profit aus jedem Handel automatisch um 3. Vorteile von Binäroptionen bei Alpari Alpari: Finanzen Magnates Awards 2015 WinnerForex-Handel mit Alpari: Zuverlässigkeit und Innovation im Handel Warum Alpari he...