Это для Microsoft SQL Server.
Я пытаюсь выбрать первую покупку для каждого клиента в таблице, подобной этой:
transaction_no customer_id operator_id purchase_date
20503 1 5 2012-08-24
20504 1 7 2013-10-15
20505 2 5 2013-09-05
20506 3 7 2010-09-06
20507 3 7 2012-07-30
Ожидаемый результат от запроса, который мы пытаемся достичь:
first_transaction_no customer_id operator_id purchase_date first_purchase
20503 1 5 2012-08-24 2012-08-24
20503 1 7 2013-10-15 2012-08-24
20505 2 5 2013-09-05 2013-09-05
20506 3 7 2010-09-06 2010-09-06
20506 3 7 2012-07-30 2010-09-06
Наиболее близким является следующий запрос:
SELECT a.customer_id, MIN(a.purchase_date) As first_occurence
FROM Sales_Transactions_Header as a
GROUP BY a.customer_id;
Со следующим результатом:
customer_id first_occurence
1 2012-08-24
2 2013-09-05
3 2010-09-06
Но когда мы выбираем остальные необходимые поля, мы, очевидно, должны добавить их в предложение GROUP BY, что сделает результат от MIN другим. Мы также пытались присоединиться к ней самостоятельно, но не достигли никакого прогресса.
По сути, все, что я пытаюсь сделать, это добавить данные из начального заказа MIN к идентификатору клиента, чтобы при каждом заказе я также мог получать данные из их первоначального заказа. В этом примере этой информацией является дата их первой покупки и номер их первой транзакции.
Как получить остальные коррелированные значения, не путая агрегатную функцию?