根据按 Id 分区的日期列获取列的第一个值

Get the first value of a column based on a date column partitioned by Id

目标: 我希望我的输出显示每个不同的 subscription_id,第一个 transaction_id 基于最早的日期。

问题: subscription_id 在我的输出中不明显。

情况: 我在一个 table 中有几列,但只有三列有用:

每个 subscription_id 可以有多个 transaction_id。我需要根据最早的日期为每个 subscription_id 选择第一个 transation_id。

查询: 我尝试了以下两个查询,认为它们应该给我相同的结果,但两者不同。此外,当只有 DISTINCT subscription_id 应该出来时,两个 return 重复 subcription_ids。

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

我哪里做错了或者有什么不同?

你可以像下面这样使用子查询

  select * from 
    (SELECT *,
            row_number() OVER(PARTITION BY email ORDER BY LOGIN_TIME) AS rn
    FROM #test1
    ) t where t.rn=1