Anmelden

View Full Version : SQL erste x sätze aller Gruppen



dd3tj
25-02-15, 12:46
Hallo,

habe eine datei mit Artikel und Chargen und möchte zu jeden Teil immer die letzten 3 Chargen

habe es so versucht

select artikel, charge from datei group by artikel, charge fetch first 3 rows olny

dabei bekommen ich aber nur 3 sätze

gibt es da eine lösung

Danke

DD3TJ

cbe
25-02-15, 13:41
hm, als SQL habe ich keine (lesbare) Idee,

aber vielleicht in einem Programm als Cursor definieren
select artikel, charge from datei group by artikel, charge order by artikel, charge

und dann in Fetch-Schleife lesen:
- bei Artikelwechsel Zähler auf 0 setzen
- Satz ausgeben wenn Zähler<3
- Zähler+1

ExAzubi
25-02-15, 13:45
Artikelstamm JOIN auf ein (Select CHARGE FROM CHARGENSTAMM WHERE CARTIKEL =AARTIKEL FRETCH FIRST 3 ROWS)

Aber Achtung ORDER BY DATE DESC mit angeben, sonst bekommst du nur die ersten 3 Chargen...

B.Hauser
25-02-15, 14:26
Wie wär's damit:

With x as select Rank() Over(Partition By Artikel order By Artikel, Charge Desc) lfd
artikel, charge
from datei
group by Artikel, Charge
Select *
From X
Where Lfd between 1 and 3;

ggf. ist noch eine zusätliche Common Table Expression erforderlich wegen des GROUP BYs

Birgitta

dd3tj
25-02-15, 15:06
Hallo Frau Hauser,

Damit ging es

Danke

Gruss
DD3TJ
Thibaut Foucart

ExAzubi
25-02-15, 17:39
Hallo Birgitta,

was ist denn das? Sowas habe ich ja noch nie gesehen!!!!:eek:

Fuerchau
25-02-15, 20:22
Das sind auch Funktionen die es erst ab V6 gibt.
Wer also noch auf V5 ist kann diese nicht nutzen.
Stichwort im SQL-Handbuch: OLAP sowie auch neu CUBE.

B.Hauser
26-02-15, 05:06
Die OLAP-Ranking Funktionen (Row_Number(), Rank() und Dense_Rank()) gibt es bereits seit Release V5R4!
Das multidimensional Grouping (CUBE, ROLLUP und GROUPING SET) gibt es allerdings erst ab 6.1.
Wobei das eine mit dem anderen nichts zu tun hat.

Birgitta

ExAzubi
26-02-15, 06:38
@Fuerchau
Handbuch? Was ist denn das? ;)

Dann werde ich mir das mal anschauen, sieht interresant aus...