Цель: Я бы хотел, чтобы в моих выходных данных отображался каждый отдельный subscription_id, первый идентификатор транзакции на основе самой ранней даты.
Проблема: subscription_ids в моем выводе не различимы.
Ситуация: У меня есть несколько столбцов в таблице, но полезны только три:
- subscription_id
- TRANSACTION_ID
- issue_date
Каждый подписка может иметь несколько транзакций. Мне нужно выбрать первый transation_id для каждого subscription_id на основе самой ранней даты.
Запрос: Я пробовал следующие два запроса, думая, что они должны дать мне одинаковые результаты, но оба они разные. Кроме того, оба возвращают повторяющиеся идентификаторы subcription_id, когда должен быть указан только DISTINCT
subscription_id.
SELECT DISTINCT t.subscription_id
,t.transation_id
,MIN(t.issue_date) As Min_Id
FROM table AS t
WHERE issue_date >= '2019-01-21'
GROUP BY t.subscription_id, t.transation_id
ORDER BY subscription_id desc
SELECT DISTINCT t.subscription_id
,FIRST_VALUE(t.transation_id)
OVER (PARTITION BY t.subscription_id ORDER BY t.issue_date ASC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS Min_id
,issue_date
FROM table AS t
WHERE issue_date >= '2019-01-21'
ORDER BY subscription_id desc
Я запустил макет данных как таковой, и это сработало.
INSERT INTO #test1
VALUES
('2018-11-01', 'ABC@gmail.com')
,('2018-11-02', 'ABC@gmail.com')
,('2018-11-03', 'ABC@gmail.com')
,('2018-07-01', 'DEF@gmail.com')
,('2018-07-02', 'DEF@gmail.com')
SELECT DISTINCT EMAIL
,FIRST_VALUE(login_time)
OVER(PARTITION BY email ORDER BY LOGIN_TIME ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS DATES
FROM #test1
Mock-up Output:
EMAIL DATES
ABC@gmail.com 2018-11-01
DEF@gmail.com 2018-07-01
Что я делаю не так или что отличается?