Sql 按唯一客户分组,然后为最小日期创建列
我有一张带有客户ID、交易日期的表 表格示例: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 |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;