postgresql查询,根据字段customerid生成有序事务号的报告

pkln4tw6  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(494)

我在postgresql数据库中有一个客户事务表,其列如下:

transactionId (primary)| customerId(int8)| transactionDate (timestamp)
1                        2                 2020-02-14
2                        3                 2020-03-08 
3                        1                 2020-02-06 //ignore
4                        2                 2020-02-10 // ignore
5                        2                 2020-03-24
6                        2                 2020-03-25
7                        2                 2020-02-12 //ignore (date < 13/02/2020)

我需要生成以下报告,其中包括:
自2020年2月13日以来,他们所做的每一笔交易的时间戳分为“transaction1”、“transaction2”等
记录也应该包括customerid。
如何构建查询以生成如下所示的报表?

CustomerId| TransactionNo | TransactionDate
2            1               2020-02-14
2            2               2020-03-24
2            3               2020-03-25
3            1               2020-03-08
select
  customerId,
  transactionDate
from myTable where transactionDate > '2020-02-13'
order by
  customerId, transactionDate

如何添加事务号,如1、2、3?

gdx19jrr

gdx19jrr1#

窗口函数可以帮助您实现这种格式的重新排序事务编号

SELECT 
    customerId, 
    rank() OVER (PARTITION BY customerId ORDER BY transactionDate) as transactionNo,
    transactionDate 
FROM 
    myTable 
WHERE 
    transactionDate > '2020-02-13' 
ORDER BY
    customerId, transactionDate

rank函数将提供一组有序的数字,即分区上的1、2、3(即逻辑分组方式,您仍将拥有数据集中的每条记录)customerid和ordered by transactiondate。
从而提供

CustomerId| TransactionNo | TransactionDate
2            1               2020-02-14
2            2               2020-03-24
2            3               2020-03-25
3            1               2020-03-08

相关问题