2016-06-07 4 views
0

Ich habe MySQL-Tabelle. Ich muss zwei höchste Werte für jede Gruppe auswählen, , aber der zweithöchste Wert kann nicht "jünger" sein. Wenn der höchste Wert für Projekt 1 das Datum "2015-12-01" ist, muss der zweithöchste Wert früher als "2015-12-01" sein. Dieses Datum ist eine Benutzereingabe innerhalb der Anwendung, z. B .: Benutzereingabedatum '2014-01-03' und erhält 2 höchstwertige Reihenfolge nach Datum.SQl Abfrage - 2 höchste Werte für jede Gruppe und Sekunde muss "jünger" dann zuerst

  1. '2013.12.05' - 500 Besuche
  2. '2013.10.11' - 480 viists

    + --------- + ----------- + ---------+ 
    | project | visits  | date  | 
    + --------- + ----------- + ---------+ 
    | 1   | 750   |2015-12-01| 
    | 1   | 582   |2014-11-01|   
    | 1   | 423   |2013-10-02| 
    | 2   | 666   |2016-01-01| 
    | 2   | 812   |2012-02-02| 
    | 2   | 450   |2014-03-05| 
    + --------- + ----------- + -------- + 
    

Edit: Ich versuche, dies (es ist komplizierter dann Beispiel oben) + Join-Tabelle aufgrund von ProjectName

set @num := 0, @group := ''; 

select ProjectName,visits, date 
        from 
        (
        select date, Projects_ID, visits, 
        @num := if(@group = `Projects_ID`, @num + 1, 1) as row_number, 
        @group := Projects_ID as col 
        from Hits 
        where date < '2016-01-11' and visits > 0 
        order by Projects_ID,date, visits desc 
        ) as x inner join Projects as p on x.Projects_ID = 
        p.ID 
        where x.row_number <= 2 
        group by ProjectName,Projects_ID, date 

Ich habe Tabelle, wo der höchste Wert war, aber ich In einigen Fällen war der zweithöchste Wert der "jüngste" Wert, dann der höchste Wert.

+2

Ich verstehe die Regeln nicht. "Daten" sind nicht "jünger" als andere Daten - früher oder später. Und was sind die erwarteten Ergebnisse für Ihre Beispieldaten? –

+0

Ihre Anweisung "Benutzereingabedatum" macht keinen Sinn - wie bezieht sich das vom Benutzer ausgewählte Datum auf die Abfrage? –

+0

@KristenWaite Benutzer wählen Eingangswert über die Benutzeroberfläche in meiner App .. –

Antwort

1
SELECT a.visits, a.project, a.date 
FROM temper1 AS a 
WHERE (SELECT COUNT(*) 
     FROM temper1 AS b 
     WHERE b.project = a.project AND b.date >= a.date 
     ) <= 2 
ORDER BY a.visits ASC, a.date DESC 
+0

es funktioniert wahrscheinlich nicht, Abfrage noch runnig (viele Minuten) .. Gibt es eine schnellere Lösung? –

Verwandte Themen