Sql 按唯一客户分组,然后为最小日期创建列

Sql 按唯一客户分组,然后为最小日期创建列,sql,amazon-redshift,Sql,Amazon Redshift,我有一张带有客户ID、交易日期的表 表格示例: ID |transaction_date PT2073|2015-02-28 PT2073|2019-02-28 PT2013|2015-04-28 PT2013|2017-02-11 PT2013|2017-07-11 ID |transaction_date|first_transaction_date PT2073|2015-02-28 |2015-02-28 PT2073|2019

我有一张带有客户ID、交易日期的表

表格示例:

ID    |transaction_date
PT2073|2015-02-28    
PT2073|2019-02-28    
PT2013|2015-04-28    
PT2013|2017-02-11   
PT2013|2017-07-11    
ID    |transaction_date|first_transaction_date
PT2073|2015-02-28    |2015-02-28 
PT2073|2019-02-28    |2015-02-28 
PT2013|2015-04-28    |2015-04-28
PT2013|2017-02-11    |2015-04-28
PT2013|2017-07-11    |2015-04-28
目标:我想创建另一列,以便为每个唯一ID获取第一个事务日期。它应该是这样的:

表格示例:

ID    |transaction_date
PT2073|2015-02-28    
PT2073|2019-02-28    
PT2013|2015-04-28    
PT2013|2017-02-11   
PT2013|2017-07-11    
ID    |transaction_date|first_transaction_date
PT2073|2015-02-28    |2015-02-28 
PT2073|2019-02-28    |2015-02-28 
PT2013|2015-04-28    |2015-04-28
PT2013|2017-02-11    |2015-04-28
PT2013|2017-07-11    |2015-04-28
我创建了另一个表,在其中选择最小值,然后将其分组:

根据id从客户详细信息组中选择id,MIN(交易日期)作为第一个交易日期

当我检查表时,我在
first\u transaction\u date
列中没有得到唯一id的相同值。

用法:它给出了已排序组的第一个值(您的组是由
transaction\u date
排序的
id
):


如果您的Postgres版本不支持窗口功能(8.4之前版本,Amazon Redshift):

使用
min()
作为窗口函数:


不需要
groupby

我收到错误:操作无效:带有ORDERBY子句的聚合窗口函数需要一个框架子句请参见上面的演示链接。这是有效的。你改变了什么?你能试着用提琴重现这个问题吗?在这种情况下,这不是和
min(transaction\u date)over(partition by id)
一样吗?我没有做任何更改。我正在sql上运行它workbench@a_horse_with_no_name当然可以;)所以,OP,尝试用fiddle重现问题(显示实际数据和表结构以及您使用的代码:)
select t.*, min(t.transaction_date) over (partition by t.id)
from t;