2017-07-09 6 views
0

J'ai une table commeComment obtenir la date maximum par mois

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 

Je veux pour chaque nouveau KUNNR pour obtenir le dossier avec la date maximum par mois, à savoir le maximum pour mai et max Avril etc. OK, je vais trier la boucle de la table et pour chaque nouveau kunnr .... comment puis-je obtenir l'enregistrement pour la date maximale pour chaque mois?

Merci à l'avance Elias

PS: STH a mal tourné et je me rends compte que je ne comprends pas ce que je veux. J'ai les lignes suivantes dans une table

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 

et je veux choisir la dernière date de chaque mois à savoir que je veux la sélection pour me mettre les lignes suivantes

0000527746 1000 11.06.2017 20170718100906.3337170 
0000527746 1000 24.07.2017 20170718100757.4970390 

J'utilise ce qui suit sql

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. 

mais il affiche les lignes suivantes

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

Que faire pour avoir 1 ligne par mois?

Merci Elias

+2

Qu'avez-vous essayé jusqu'à présent? – vwegert

+0

Voulez-vous dire le dernier jour d'un mois? Nouveau kunnr ne sera pas encore dans votre table ... –

+0

Pouvez-vous ajouter le résultat attendu pour l'exemple? –

Répondre

4

Pourquoi ne pas utiliser des fonctions d'agrégation seulement pendant select de DB? Il est plus efficace de boucler la table interne.

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. 

Notez que la requête ci-dessus ne sélectionner que les kunnrs qui ont des positions correspondantes dans vbap.

+0

Merci beaucoup Suncatcher. Juste 2 choses. Premièrement, je veux le MAX par bukrs, kunnr, date et s'il y a plus de 1 rangs alors nous prendrons le 1 avec MAX posnr. Je comprends que je boucle ensuite à la table interne et a pris les champs restants. Merci beaucoup ELIAS – ekekakos

+0

Pas besoin de boucler l'itab, voir le SELECT mis à jour. – Suncatcher