web-dev-qa-db-fra.com

Sélectionnez la première ligne de chaque groupe en sql

J'ai deux tables .

1-> SM_Employee 

 (1) employeeid   
 (2) roleid
 (3) storeid

2-> SM_SalesRepWorkflow

 (1) workflowid
 (2) Salesrepid   foreign key to employeeid
 (3) QuantityAssigned
 (4) QuantityLeft
 (5) month 
 (6) year

Par ces tables, je dois sélectionner la première ligne de chaque détail SalesRep de la commande SM_SalesRepWorkflow par SalesRepId pour CurrentMonth et CurrentYear.

Exemple

Workflowid SalesRepId QuantityAssigned QuantitéLeft Mois Année

WF_101: EMP_101: 100: 90: mai: 2013
WF_101: EMP_102: 100: 100: mai: 2013
WF_101: EMP_103: 100: 80: mai: 2013
WF_102: EMP_101: 100: 70: mai: 2013 

Donc, le résultat que je veux est 

WF_101: EMP_101: 100: 90: mai: 2013
WF_101: EMP_102: 100: 100: mai: 2013
WF_101: EMP_103: 100: 80: mai: 2013 

Donc, il peut y avoir beaucoup de flux de travail pour un SalesRep. Mais je veux le premier pour chaque SalesRep pour le mois et l’année en cours. 

15
Vijay

Vous pouvez utiliser la fonction ROW_NUMBER() comme ceci:

SELECT *
  FROM(SELECT workflowid, salesRepId, quantityAssigned,
              quantityLeft, month, year
              , ROW_NUMBER()
                OVER (PARTITION BY salesRepId
                          ORDER BY workflowid) AS rownumber
         FROM sm_salesRepWorkflow)
 WHERE rownumber = 1;

Fiddle Démo

32
Rachcha

J'ai un peu de difficulté à comprendre la question, donc si je ne le fais pas, je la modifierai après, mais il semblerait que vous souhaitiez faire quelque chose comme SELECT * FROM SM_SalesRepWorkflow WHERE Workflowid = latest, où dernière correspond à l'identifiant du flux de travail. Peut-être pouvez-vous déterminer le dernier élément en dehors de la requête et l'importer au lieu de le faire à partir de la requête?

0
BWStearns