Выберите первую строку каждой группы в 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
, где последним является идентификатор рабочего процесса. Возможно, вы можете определить последнюю вне запроса и принести это вместо того, чтобы делать это из запроса?