Aggregatfunktion in rekursivem SQL

9

Diese Frage ist eine erweiterte und vereinfachte Version von diese Frage .

Ich habe versucht, in SQL die folgende iterative Gleichung zu lösen:

U^{F,D}_{t,p} = (\sum_{D} U^{F,D}_{t-1,p} + C_{t-1,p} )*R^{F,D}_{t-1,p}

das ergibt:

Die nächste Analogie, die mir einfällt, ist, dass U^{F,D}_{t,p} eine Anzahl von Autos der Marke F bestimmter Farbe ( D ) ist, die ein Autohändler ( p ) zur Zeit% co_de zur Verfügung hat %. Die obige Gleichung besagt also grundsätzlich: Nimm die Einheiten der Fahrzeuge vom Vortag t (dh t-1 ), summiere die Farben ( U^{F,D}_{t-1,p} ), addiere dann zur Summe einen \sum_{D} Wert vom Vortag ( C , was auch immer das ist), und multipliziere mit einer anderen Zahl C_{t-1,p} vom Vortag ( R , was auch immer das ist).

Vereinfachtes Problem

Ich habe es geschafft, eine vereinfachte Form der obigen Gleichung zu lösen, nämlich:

, d. h. ohne die Summe über Autos Farben ( R^{F,D}_{t-1,p} ). Die Beispieldaten und die SQL-Abfrage sind in der Geige, die ich verlinke , aber ich füge sie hier als Referenz ein gut:

VOLLSTÄNDIGE DATEN:

%Vor%

SAMPLE DATEN:

Im Folgenden werden Beispieldaten für den Autohändler D , Automodell p=1 der Farbe F=BMW ( D=RED aus der mathematischen Gleichung wird D in SQL genannt) dargestellt. Die Anfangsbedingung ( DELTA ) ist hier 2015-01-01. Für alle Tage t=0 werden alle Parameter in t ( t ) und R_T, C_T ( t-1 ) angegeben. Wenn man sie kennt, besteht die Aufgabe darin, die Einheiten der Autos für alle Tage zu berechnen.% Co_de%.

%Vor%

ABFRAGE:

Um das vereinfachte Problem zu lösen, habe ich die Frage in der verbundenen Geige gestellt, dass ich fügen Sie hier auch als Referenz:

%Vor%

Diese Abfrage ergibt für die Beispieldaten, die oben eingefügt wurden, Folgendes:

%Vor%

Was gut funktioniert, d.h. für: 2015-01-02, R_T_M1, C_T_M1 , 2015-01-03, t > t=0 .

Die Abfrage ist so geschrieben, dass sie mit verschiedenen Autohändlern und verschiedenen Automarken zusammenarbeitet, die unter die Abfrage in der verbundenen Geige

Zurück zum vollständigen Problem

Die obige Abfrage kann die Summe der Farben der Autos aus der Originalgleichung nicht korrekt verarbeiten:

Dies war in den vereinfachten Daten irrelevant, da alle Autos (BMW und MERCEDES) dort nur in RED vorkommen und somit die Summe über Farben effektiv verschwindet.

Eine solche vollständige Logik sollte wahrscheinlich über einen U_t = (100+0.8)*0.7 = 70.56 -Ausdruck implementiert werden, der in der ursprünglichen Abfrage oben eingebaut ist. Leider weiß ich nicht, wie ich es machen soll.

Stellen Sie sich also vor, Sie hätten Daten in der Form wie im vereinfachten Problemabschnitt, aber jetzt existiert jede Automarke in zwei Farben, zB wie in dieser verbundenen Geige :

%Vor%

Angesichts solcher Daten würden Sie erwarten, dass die Dynamik des Händlers U_t = (70.56+0.9)*0.9 = 64.314 GROUP BY/SUM cars wie folgt aussieht:

%Vor%

Frage ist, wie die obige vereinfachte Abfrage angepasst werden sollte, um dieses Problem zu lösen.

    
Simon Righley 22.11.2015, 17:55
quelle

2 Antworten

2
___ tag123sql ___ Structured Query Language (SQL) ist eine Sprache für die Abfrage von Datenbanken. Fragen sollten Codebeispiele, Tabellenstruktur, Beispieldaten und ein Tag für die verwendete DBMS-Implementierung (z. B. MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 usw.) enthalten. Wenn sich Ihre Frage nur auf ein bestimmtes DBMS bezieht (verwendet bestimmte Erweiterungen / Funktionen), verwenden Sie stattdessen das Tag des DBMS. Antworten auf mit SQL gekennzeichnete Fragen sollten den ISO / IEC-Standard SQL verwenden. ___ qstnhdr ___ Aggregatfunktion in rekursivem SQL ___ answer33861538 ___

Die Lösung erwies sich als einfacher als ich gedacht hatte (obwohl ich einen Tag damit verbracht habe, alle möglichen Dinge auszuprobieren, und jetzt scheint alles trivial zu sein).

Die Abfrage (getestet) auf den ursprünglichen Geigendaten lautet:

%Vor%

Dies ist eine minimale Änderung der ursprünglichen Abfrage (nur eine Zeile der ursprünglichen Abfrage betroffen) und ORACLE analytische Funktion verwendet.

    
___ tag123oracle ___ Oracle Database ist ein Datenbankmanagementsystem mit mehreren Modellen, das von Oracle Corporation erstellt wurde. Verwenden Sie dieses Tag NICHT für andere Produkte von Oracle wie Java und MySQL. ___ answer3381127 ___

Ich denke nicht, dass dies die beste Antwort ist, aber ich denke, es gibt Ihnen das Ergebnis, das Sie suchen.

%Vor%

Was ich hinzugefügt habe, ist zwischen Start SUM of u_t und End SUM of u_t comments und hier ist die Geige .

    
___ tag123recursion ___ Rekursion ist eine Art Funktionsaufruf, bei dem sich eine Funktion selbst aufruft. Solche Funktionen werden auch rekursive Funktionen genannt. Strukturelle Rekursion ist eine Methode zur Problemlösung, bei der die Lösung eines Problems von Lösungen für kleinere Instanzen des gleichen Problems abhängt. ___ qstntxt ___

Diese Frage ist eine erweiterte und vereinfachte Version von diese Frage .

Ich habe versucht, in SQL die folgende iterative Gleichung zu lösen:

%code%

das ergibt:

Die nächste Analogie, die mir einfällt, ist, dass %code% eine Anzahl von Autos der Marke %code% bestimmter Farbe ( %code% ) ist, die ein Autohändler ( %code% ) zur Zeit% co_de zur Verfügung hat %. Die obige Gleichung besagt also grundsätzlich: Nimm die Einheiten der Fahrzeuge vom Vortag %code% (dh %code% ), summiere die Farben ( %code% ), addiere dann zur Summe einen %code% Wert vom Vortag ( %code% , was auch immer das ist), und multipliziere mit einer anderen Zahl %code% vom Vortag ( %code% , was auch immer das ist).

Vereinfachtes Problem

Ich habe es geschafft, eine vereinfachte Form der obigen Gleichung zu lösen, nämlich:

, d. h. ohne die Summe über Autos Farben ( %code% ). Die Beispieldaten und die SQL-Abfrage sind in der Geige, die ich verlinke , aber ich füge sie hier als Referenz ein gut:

VOLLSTÄNDIGE DATEN:

%Vor%

SAMPLE DATEN:

Im Folgenden werden Beispieldaten für den Autohändler %code% , Automodell %code% der Farbe %code% ( %code% aus der mathematischen Gleichung wird %code% in SQL genannt) dargestellt. Die Anfangsbedingung ( %code% ) ist hier 2015-01-01. Für alle Tage %code% werden alle Parameter in %code% ( %code% ) und %code% ( %code% ) angegeben. Wenn man sie kennt, besteht die Aufgabe darin, die Einheiten der Autos für alle Tage zu berechnen.% Co_de%.

%Vor%

ABFRAGE:

Um das vereinfachte Problem zu lösen, habe ich die Frage in der verbundenen Geige gestellt, dass ich fügen Sie hier auch als Referenz:

%Vor%

Diese Abfrage ergibt für die Beispieldaten, die oben eingefügt wurden, Folgendes:

%Vor%

Was gut funktioniert, d.h. für: 2015-01-02, %code% , 2015-01-03, %code% .

Die Abfrage ist so geschrieben, dass sie mit verschiedenen Autohändlern und verschiedenen Automarken zusammenarbeitet, die unter die Abfrage in der verbundenen Geige

Zurück zum vollständigen Problem

Die obige Abfrage kann die Summe der Farben der Autos aus der Originalgleichung nicht korrekt verarbeiten:

Dies war in den vereinfachten Daten irrelevant, da alle Autos (BMW und MERCEDES) dort nur in RED vorkommen und somit die Summe über Farben effektiv verschwindet.

Eine solche vollständige Logik sollte wahrscheinlich über einen %code% -Ausdruck implementiert werden, der in der ursprünglichen Abfrage oben eingebaut ist. Leider weiß ich nicht, wie ich es machen soll.

Stellen Sie sich also vor, Sie hätten Daten in der Form wie im vereinfachten Problemabschnitt, aber jetzt existiert jede Automarke in zwei Farben, zB wie in dieser verbundenen Geige :

%Vor%

Angesichts solcher Daten würden Sie erwarten, dass die Dynamik des Händlers %code% %code% cars wie folgt aussieht:

%Vor%

Frage ist, wie die obige vereinfachte Abfrage angepasst werden sollte, um dieses Problem zu lösen.

    
___
Cristian_I 22.11.2015, 22:39
quelle
1

Die Lösung erwies sich als einfacher als ich gedacht hatte (obwohl ich einen Tag damit verbracht habe, alle möglichen Dinge auszuprobieren, und jetzt scheint alles trivial zu sein).

Die Abfrage (getestet) auf den ursprünglichen Geigendaten lautet:

%Vor%

Dies ist eine minimale Änderung der ursprünglichen Abfrage (nur eine Zeile der ursprünglichen Abfrage betroffen) und ORACLE analytische Funktion verwendet.

    
Simon Righley 22.11.2015 23:31
quelle

Tags und Links