Цель: Я хотел бы объединить две таблицы на основе первого значения столбца Id, сгруппированного по столбцу Id подписки, упорядоченному по столбцу созданному_ататуру.
Ситуация:
Таблица 1 выглядит следующим образом:
id channel trx_date
123 organic 01/01/2019 05:00:00
234 direct 01/01/2019 05:01:00
987 add 01/01/2019 10:00:00
654 organic 01/01/2019 10:15:00
Таблица 2:
subscription_id id os created_at
sub890 123 mac 01/01/2019 05:00:01
sub890 234 mac 01/01/2019 05:01:01
sub111 987 windows 01/01/2019 10:00:01
sub111 654 mac 01/01/2019 10:20:01
Мне нужно взять самый ранний идентификатор в таблице 2, сгруппированный по идентификатору подписки, и внутреннее объединить его сТаблица 1. Итак, в этом примере мой вывод будет
subscription_id id os created_at id channel trx_date
sub890 123 mac 01/01/2019 05:00:01 organic 01/01/2019 05:00:00
sub111 987 windows 01/01/2019 10:00:01 add 01/01/2019 10:00:00
Что я пробовал: Я думал об использовании FIRST_VALUE, но я застрял в том, как я могу их подключить
SELECT t1.*,
t2.subscription_id,
t2.os,
t2.created_at,
FIRST_VALUE(t2.id) OVER (PARTITION BY t2.subscription_id ORDER BY t2.created_at ASC) as Min_Id
FROM table1 t1
INNER JOIN table2 t2 ON t1.id = t2.Min_id
Информация о скрипте:
CREATE TABLE table1
([id] varchar(13), [channel] varchar(50), [trx_date] Datetime)
INSERT INTO table1
VALUES
('123', 'organic', '2019-01-01 05:00:00'),
('234', 'direct', '2019-01-01 05:01:00'),
('987', 'add', '2019-01-01 10:00:00'),
('654', 'organic', '2019-01-01 10:15:00')
CREATE TABLE table2
([subscription_id] varchar(13),[id] varchar(13), [os] varchar(10), [created_at] Datetime)
INSERT INTO table2
VALUES
('sub890', '123', 'mac', '2019-01-01 05:00:01'),
('sub890', '234', 'mac', '2019-01-01 05:01:01'),
('sub111', '987', 'windows', '2019-01-01 10:00:01'),
('sub111', '654', 'mac', '2019-01-01 10:20:01')
Очевидно, что это не работает из-за предложения ON.Требуется ли в этой ситуации функция row_number с крестиком?Есть ли лучший способ сделать это?FIRST_VALUE - неправильная функция для использования?