Выберите первую строку каждой группы в sql

У меня есть две таблицы.

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

В этих таблицах мне нужно выбрать первую строку каждой информации SalesRep из заказа SM_SalesRepWorkflow SalesRepId для CurrentMonth и CurrentYear.

Пример

Workflowid SalesRepId QuantityAssigned QuantityLeft Month Year

WF_101: EMP_101:100: 90: май: 2013
WF_101: EMP_102: 100: 100: май: 2013
WF_101: EMP_103: 100: 80: май: 2013
WF_102: EMP_101:100: 70: май: 2013

Итак, результат:

WF_101: EMP_101:100: 90: май: 2013
WF_101: EMP_102: 100: 100: май: 2013
WF_101: EMP_103: 100: 80: май: 2013

Итак, для SalesRep может быть много Workflow. Но я хочу первый для каждого SalesRep для текущего месяца и года.

Ответ 1

Вы можете использовать функцию ROW_NUMBER() следующим образом:

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;

Скриншот Демо

Ответ 2

У меня проблемы с пониманием вопроса, поэтому, если я уйду, я его отредактирую после, но похоже, что вы хотите сделать что-то вроде SELECT * FROM SM_SalesRepWorkflow WHERE Workflowid = latest, где последним является идентификатор рабочего процесса. Возможно, вы можете определить последнюю вне запроса и принести это вместо того, чтобы делать это из запроса?