2017-07-09 6 views
0

Ich habe eine Tabelle wieWie das max Datum pro Monat bekommen

kunnr  date   posnr 
30001  28/5/2017  1 
30001  25/5/2017  2 
30001  15/5/2017  3 
30001  25/4/2017  4 
30001  20/4/2017  5 
30002  15/5/2017  6 
30002  25/4/2017  7 

ich für jeden neuen KUNNR will den Rekord mit dem max Datum pro Monat zu erhalten, nämlich der max für Mai und max für April etc .

OK, ich sortiere die Tabelle Schleife bei ihm und für jeden neuen kunnr .... wie bekomme ich den Rekord für das maximale Datum für jeden Monat?

Vielen Dank im Voraus Elias

PS: etw falsch gelaufen ist und ich weiß, dass ich nicht bekommen, was ich will. Ich habe die folgenden Zeilen in einer Tabelle

0000527746 1000 10.06.2017 20170718100757.5010080 
0000527746 1000 10.06.2017 20170718100757.5039300 
0000527746 1000 11.06.2017 20170718100839.9209480 
0000527746 1000 11.06.2017 20170718100906.3337170 
0000527746 1000 24.07.2017 20170718095843.3555610 
0000527746 1000 24.07.2017 20170718100209.2203570 
0000527746 1000 24.07.2017 20170718100757.4970390 

und ich möchte das letzte Datum eines jeden Monats wählen und zwar möchte ich die Auswahl mir die folgenden Zeilen

0000527746 1000 11.06.2017 20170718100906.3337170 
0000527746 1000 24.07.2017 20170718100757.4970390 

Ich verwende die folgende SQL-

bringen
select bukrs kunnr dat max(time) as time 
    from zcollectoraction into corresponding fields of table it_collectoraction 
    where bukrs = p_bukrs and 
      kunnr in so_kunnr and 
      dat in so_date 
    group by bukrs kunnr dat. 

aber es zeigt die folgenden Zeilen

0000527746 1000 11.06.2017 20170718100906.3337170 
0000527746 1000 11.06.2017 20170718100906.3337170 
0000527746 1000 24.07.2017 20170718100757.4970390 

Was ist zu tun, um 1 Zeile pro Monat zu haben?

Dank Elias

+2

Was haben Sie bisher versucht? – vwegert

+0

Meinst du den letzten Tag eines jeden Monats? Neue kunnr's sind noch nicht in deinem Tisch ... –

+0

Kannst du das erwartete Ergebnis für das Beispiel hinzufügen? –

Antwort

4

Warum nicht Aggregatfunktionen während wählen Sie aus der DB nur zu benutzen? Es ist effizienter, die interne Tabelle zu loopen.

SELECT k~bukrs_vf, k~kunnr, k~erdat, MAX(p~posnr) AS T 
    FROM vbak AS k 
    JOIN vbap AS p 
    ON k~vbeln = p~vbeln 
    INTO TABLE @DATA(lt_result) 
GROUP BY bukrs_vf, kunnr, k~erdat 
ORDER BY bukrs_vf. 

Beachten Sie, dass die obige Abfrage nur die kunnrs wählen wird, die in vbap entsprechenden Positionen haben.

+0

Vielen Dank Suncatcher. Nur 2 Dinge. Zuerst möchte ich die MAX von bukrs, kunnr, date und wenn es mehr als 1 Zeilen gibt, dann nehmen wir die 1 mit MAX posnr. Ich verstehe, dass ich dann auf die interne Tabelle zurückgreifen und die restlichen Felder übernehmen werde. Vielen Dank ELIAS – ekekakos

+0

Keine Notwendigkeit, die itab Schleife, sehen Sie die aktualisierte SELECT. – Suncatcher