2016-04-07 8 views
-2

Ich habe folgende SQL-Abfrage, die an auszuführen:SQL-Abfrage-Fehler (korrelierte Unterabfrage mit skip-level Korrelationen wird nicht unterstützt)

PostgreSQL 9.5.1, von Visual C++ kompiliert 1800 zu bauen, 64-Bit-

aber nicht an:

PostgreSQL 8.2.15 (Greenplum Database 4.3.5.4 Build 1) auf x86_64-unknown-linux-gnu, von GCC gcc (GCC) zusammengestellt 4.4.2

SELECT id, 
(SELECT AVG(dur) 
    FROM data t 
    WHERE t.id = t1.id AND 
     t.id IN (SELECT id 
        FROM data t2 
        WHERE t2.id = t1.id 
        ORDER BY dur 
        DESC LIMIT 10)) as avgdur 
FROM data t1 
WHERE t1.b<10000 
ORDER BY avgdur 
DESC LIMIT 1; 

bekomme ich folgende Fehlermeldung: ERROR: korrelierte Unterabfrage mit Skip-Level-Korrelationen nicht unterstützt wird (subselect.c: 394)

Wie soll ich die Abfrage ändern?

+0

siehe diesen Link, könnte es helfen. http://stackoverflow.com/questions/426221/postgresql-correlated-sub-query-fail – Bharat

+0

'WO t2.id = t1.id)) als avgdur' - >>' WHERE t2.id = t.id)) als avgdur' Aber die Abfrage kann wahrscheinlich vereinfacht werden. – joop

Antwort

0

Ihre Probleme liegt in WHERE t2.id = t1.id. Sie können die Abfrage in einer Unterabfrage auf der übergeordneten Ebene, aber nicht auf höheren Ebenen verwenden. Also hier haben Sie 3 Ebenen:

  1. t1
  2. t
  3. t2

Sie t aus dem "t2 Unterabfrage" verwenden können (Abfrage aus, t2 in der FROM-Klausel ist), und Sie kann t1 in deiner "t-Unterabfrage" verwenden. ABER Sie können nicht t1 von Ihrer "t2 Unterabfrage" verwenden.

Eine Lösung könnte WHERE t2.id = t.id)) as avgdur sein.

Einige Infos hier: http://www.greenplumdba.com/correlated-subqueries-csqs-in-greenplum

0

mir Sieht aus wie Sie einfach eine Gruppe zu tun, indem sie auf eine andere Weise versuchen, ...

SELECT id, AVG(dur) as avgdur 
FROM data t1 
WHERE t1.b<10000 
GROUP BY id 
ORDER BY avgdur 
DESC LIMIT 1; 
+0

ja, aber ich muss mehr Dinge tun, ich habe nur die Frage vereinfacht, ich muss die ID finden, wo die 5 max Element Durchschnitt ist das Maximum – ivankiss

+1

Scheint wie Sie ein wenig zu viel vereinfacht ... – jarlh

0

Pivotal Abfrageoptimierer (erhältlich in 4.3.5) unterstützt Abfragen mit mehrstufiger Korrelation. Führen Sie die folgenden Befehle aus, um den Pivotal Query Optimizer zu aktivieren.

set optimizer = on;

Ich würde Sie ermutigen, auf die neueste GPDB-Version von 4.3.8, die mehrere Verbesserungen und Fehlerbehebungen hat, zu aktualisieren.

Lassen Sie mich wissen, ob dies hilft!

Verwandte Themen