immer ersten Datensatz selektieren

claudifranko

Neuer Benutzer
Beiträge
4
Hallo,

ich habe folgende Daten.

Ich möchte aus diesen Daten immer den ersten Satz pro Artikel selektieren. (So dass in meinem Fall nur noch 2 Sätze stehenbleiben. Beim Groupieren muss ,am auf jedem Fall immer irgendwelche Summen bilden oder den höchsten bzw. niedrigsten Wert angeben. Das will ich aber nicht.

Kann mir jemand helfen?

Artikle Auftrag Menge Anlagetermin Wunschtermin Versandtermin
0815 AB1234 100 01.03.2013 24.08.2013 24.08.2013
0815 AB1234 100 01.03.2013 01.05.2013 01.05.2013
0814 AB1245 200 01.04.2013 01.06.2013 01.06.2013
 
Werbung:
Hallo,

ich habe folgende Daten.

Ich möchte aus diesen Daten immer den ersten Satz pro Artikel selektieren. (So dass in meinem Fall nur noch 2 Sätze stehenbleiben. Beim Groupieren muss ,am auf jedem Fall immer irgendwelche Summen bilden oder den höchsten bzw. niedrigsten Wert angeben. Das will ich aber nicht.

Kann mir jemand helfen?

Artikle Auftrag Menge Anlagetermin Wunschtermin Versandtermin
0815 AB1234 100 01.03.2013 24.08.2013 24.08.2013
0815 AB1234 100 01.03.2013 01.05.2013 01.05.2013
0814 AB1245 200 01.04.2013 01.06.2013 01.06.2013


Beim gruppieren mußt Du eine Aggregatfunktion anwenden. Das kann SUM() sein, aber auch MIN() oder MAX(). Du sagst nun den ersten Datensatz. Das bezieht sich vermutlich auf ein Datum. Davon hast Du 3. Also, Du suchst ein "select artikle, min(...) from bla group by artikle", für ... setzt Du eines Deiner Datumfelder ein. So einfach.

Andreas
 
Mensch, das ging ja schnell.

Aber ganz so einfach ist es eben nicht. Ich sortiere die Daten bereits vor nach Anlagedatum. So dass immer der Datensatz mit dem niedrigsten Anlagedatum oben steht.
Es kann aber auch sein, dass es immer das gleiche Anlagedatum ist. Und dann komme ich natürlich mit min(..) nicht wirklich weiter. Jetzt hab ich gedacht, ok, nehm ich ein weiteres Datumsfeld dazu, aber hier fall ich dann genauso auf die Nase, da diese hier ebenfalls gleich sein können.
 
Mensch, das ging ja schnell.

Aber ganz so einfach ist es eben nicht. Ich sortiere die Daten bereits vor nach Anlagedatum. So dass immer der Datensatz mit dem niedrigsten Anlagedatum oben steht.
Es kann aber auch sein, dass es immer das gleiche Anlagedatum ist. Und dann komme ich natürlich mit min(..) nicht wirklich weiter. Jetzt hab ich gedacht, ok, nehm ich ein weiteres Datumsfeld dazu, aber hier fall ich dann genauso auf die Nase, da diese hier ebenfalls gleich sein können.

Dann ist Deine Datenbank kapott ;-)

Code:
test=*# select * from claudio ;
 artikel | anlagetermin
---------+--------------
     815 | 2013-03-01
     815 | 2013-03-01
     814 | 2014-04-01
(3 rows)

test=*# select artikel, min(anlagetermin) from claudio group by artikel;
 artikel |    min
---------+------------
     814 | 2014-04-01
     815 | 2013-03-01
(2 rows)

Andreas
 
Um die restlichen Informationen dazu zu bekommen muss ich diese ebenfalls mit in den Group by aufnehme und dann sind es wieder alle 3 Zeilen oder gibt es eine Möglichkeit diese außen vor zu lassen? Wahrscheinlich muss ich diese dann umständlich dazu lesen, oder.
 
Um die restlichen Informationen dazu zu bekommen muss ich diese ebenfalls mit in den Group by aufnehme und dann sind es wieder alle 3 Zeilen oder gibt es eine Möglichkeit diese außen vor zu lassen? Wahrscheinlich muss ich diese dann umständlich dazu lesen, oder.

Ja. In ORA kannst ja auch row_number() over (partition by ... order by ...) verwenden und dann die mit row_number=1 verwenden und den Rest entsorgen. Schaffst Du! ;-)
 
Werbung:
Zurück
Oben