LIMIT

Hallo,
möchte über eine Abfrage ein LIMIT auf die einzelnen WHERE Clauseln setzen, geht sowas?
Sprich wenn Clausel 1 greift soll er bei 5 Ergebnissen aufhören, bei clausel 2 das gleiche …

SELECT 
	max(artikel),auftrag,max(seite),
		int4(1000000/float8((sum(sj)+sum(parts)))*sum(fehler))
FROM aoi_auswertung
WHERE (artikel='xyz' and seite = 'TOP') or (artikel='xyz' and seite = 'BOT')
GROUP by auftrag
ORDER by max(r_date) desc
LIMIT 10

Der SQL bringt mir nur Ergebnisse der 1. Clausel, logisch weil die mehr als 10 Ergebnnisse bringt.
Wie kann man so etwas lösen?

Danke

Gruß
Andreas

Du hast nur exakt 1 (in Worten: 1) Where-Clause. Mein Kaffeesatz meint aber, Du willst gruppenweise ein Limit. Das geht, indem Du gruppenweise die Rows zählst:

select …, row_number() over(partition by …) as counter

Damit bekommst je Gruppe eine Zählung. In einem Select da drum herum kannst dann das als Where-Condition nehmen:

… where counter <= 5


Andreas

okok,
hab befürchtet dass ich es nicht kapieren werde :slight_smile:
Keine Ahnung von was du sprichst, bin nur ein “normaler” SQL Anwender :wink:

Trotzdem Danke
Ich versuche mit den Worten was anzufangen;)

Andreas meint sowas hier:

select max_artikel,
       auftrag,
       max_seite,
       fehler_summe
from (       
    SELECT max(artikel) over (partition by auftrag) as max_artikel,
           auftrag,
           max(seite) over (partition by auftrag) as max_seite,
           int4(1000000/float8((sum(sj)+sum(parts)))*sum(fehler)) over (partition by auftrag) as fehler_summe,
           row_number() over (partition by auftrag order by r_date desc) as rn,
    FROM aoi_auswertung
    WHERE (artikel='xyz' and seite = 'TOP') or (artikel='xyz' and seite = 'BOT')
) t
where rn <= 10;

Ein Tutorial zu “window functions” gibt es im Handbuch: http://www.postgresql.org/docs/current/static/tutorial-window.html

ok danke schon mal,
jetzt kommt ein Fehler:

ERROR: syntax error at or near “over”
LINE 6: SELECT max(artikel) over (partition by auftrag) as max_a…
^
********** Fehler **********

ERROR: syntax error at or near “over”
SQL Status:42601
Zeichen:113

Dann verwendest Du eine veraltete Postgres Version (<= 8.3)

hab’s befürchtet :frowning: aber leider keinen Einfluss drauf :frowning:

Solltest Du aber. Die ist schon tot, unsuportet. Warum hast Du da keinen Einfluß drauf?