![]() |
![]() |
|
![]() |
![]() |
|
Programmierung Rat & Tat für Programmierer |
![]() |
|
Themen-Optionen | Ansicht |
![]() |
#1 |
Veteran
![]() Registriert seit: 24.04.2002
Beiträge: 278
|
![]() Hallo zusammen,
habe folgendes Problem: In einer (Oracle) Tabelle gibt es folgende 4 Felder: Artikel_NR, Artikel_Bez, Verkauf_Menge, Verkauf_Dat, Verkaeufer_Name Jetzt möchte ich pro Artikel die letzten 5 Verkäufe (mit allen Infos) und den ersten Verkauf sehen. Wie stelle ich das am Besten an??? Danke für eure Hilfe! lg |
![]() |
![]() |
![]() |
#2 |
Aussteiger
![]() |
![]() um dein problem besser zu verstehen:
ein artikel wurde zb. 269 verkaut, du willst jetzt anhand des datums also folgende ausgabe bekommen: VKNR ... Art_NR ... Artikel_Bez ........ VK_Menge ... Verkauf_Dat ... VK_Name 269 .... 4711 ..... Köllnisch-Wasser ... 250 ........ 23.01.2007 .... Charly 268 .... 4711 ..... Köllnisch-Wasser ... 110 ........ 12.01.2007 .... Hannes 267 .... 4711 ..... Köllnisch-Wasser ... 380 ........ 08.01.2007 .... Jutta 266 .... 4711 ..... Köllnisch-Wasser ... 630 ........ 19.12.2006 .... Sandra 265 .... 4711 ..... Köllnisch-Wasser ... 180 ........ 17.12.2006 .... Heinz 1 ...... 4711 ..... Köllnisch-Wasser ... 100 ........ 01.03.1997 .... Chefin
____________________________________
Praktizierender Eristiker No hace falta ser un genio para saber quién dijo eso. Der wirklich faule Mensch ist oft extrem fleißig, denn er will möglichst schnell wieder faul sein. |
![]() |
![]() |
![]() |
#3 |
Master
![]() Registriert seit: 13.08.2003
Beiträge: 624
|
![]() Eine Möglichkeit wäre:
(SELECT * FROM (SELECT * FROM TabellenName ORDER BY Verkauf_Dat DESC) WHERE ROWNUM < 6) UNION ALL (SELECT * FROM (SELECT * FROM TabellenName ORDER BY Verkauf_Dat ASC) WHERE ROWNUM<2) Vl. gehts schöner auch, ka. |
![]() |
![]() |
![]() |
#4 |
Veteran
![]() Registriert seit: 24.04.2002
Beiträge: 278
|
![]() Ja so ungefähr brauch ich das. Danke.
Nur, es gibt in dieser Tabelle nicht nur einen Artikel sondern xxxxx. Womit das mit den rownums nicht ganz so funktioniert => Liefert nur die letzten 5, aber nicht die letzten fünf PRO Artikel ....... Andere/Zusätzliche Ideen ????? lg |
![]() |
![]() |
![]() |
#5 |
Aussteiger
![]() |
![]() *) selektiere die daten sortiert nach art-nr. (beliebig) und datum (absteigend)
*) mach einen loop über die gelieferten sätze *) gib dir die sätze mit zähler in (1, 2, 3, 4, 5, gesamt-anzahl an sätzen zu diesem artikel) aus ... [gesamt-anzahl an sätzen zu diesem artikel mußt du separat ermitteln] *) gruppenwechsel bei nächstem artikel nicht vergessen
____________________________________
Praktizierender Eristiker No hace falta ser un genio para saber quién dijo eso. Der wirklich faule Mensch ist oft extrem fleißig, denn er will möglichst schnell wieder faul sein. |
![]() |
![]() |
![]() |
#6 |
Aussteiger
![]() |
![]() hab da jetzt schnell mal was runtergetippt - und bedingt getestet.
Code:
set serveroutput on declare cursor c_art is select art.* from artikel art order by artnr, verkauf_dat desc ; cursor c_anzahl_pro_art (p_artnr in number) is select count(1) from artikel where artnr = p_artnr ; v_artnr_vorh artikel.artnr%TYPE := 0; v_anzahl number := 0; v_zaehler number := 0; begin for r_art in c_art loop if r_art.artnr != v_artnr_vorh then -- Gruppenwechsel, Zähler zurücksetzen -- und Anzahl der Sätze pro Artikel ermitteln v_zaehler := 0; open c_anzahl_pro_art (r_art.artnr); fetch c_anzahl_pro_art into v_anzahl; close c_anzahl_pro_art; dbms_output.put_line('Sätze pro ArtNr ' || r_art.artnr || ': ' || to_char(v_anzahl)); end if; v_zaehler := v_zaehler + 1; if v_zaehler in (1,2,3,4,5,v_anzahl) then dbms_output.put_line(r_art.artnr || ' ' || r_art.verkauf_dat || ' ' || r_art.vk_menge); end if; v_artnr_vorh := r_art.artnr; end loop; end; / gibt sicherlich interessantere lösungsmöglichkeiten auch noch ![]()
____________________________________
Praktizierender Eristiker No hace falta ser un genio para saber quién dijo eso. Der wirklich faule Mensch ist oft extrem fleißig, denn er will möglichst schnell wieder faul sein. |
![]() |
![]() |
![]() |
#7 |
Veteran
![]() Registriert seit: 24.04.2002
Beiträge: 278
|
![]() Hi,
danke. Hab das mittlerweile allerdings anders gelöst. Erzeug mir eine neue Tabelle in der ich mithilfe der LEAD Funktionen pro Artikel genau EINEN Datensatz mit allen Infos reinschreibe. Also in etwa so: Artikel_NR, Artikel_Bez, DAT_LETZTER_VK, MENGE_LETZTER_VK, VERK_LETZTER_VK, DAT_VORLETZTER_VK, MENGE_VORLETZTER_VK, VERK_VORLETZTER_VK, usw. bishin zu DAT_ERSTER_VK, MENGE_ERSTER_VK, VERK_ERSTER_VK. Aus dieser Tabelle lese ich dann einfach aus. Gibt zwar sicherlich elegantere Methoden, aber es funzt...... Danke für eure Hilfe. lg |
![]() |
![]() |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|