繁体   English   中英

postgresql 查询以生成基于字段 - customerId 的已订购交易编号的报告

[英]postgresql query to generate report of ordered transaction numbers based on field - customerId

我在 postgresql db 中有一个客户交易表,其中包含以下列:

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)

我需要生成下面的报告,其中有:

  1. 他们自 2020 年 2 月 13 日以来完成的每笔交易的时间戳分为“交易 1”、“交易 2”等
  2. 记录也应包括 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?

Window 功能可以帮助您实现这种格式的重新排序交易号

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

等级 function 将提供一组有序数字,即分区上的 1、2、3(即逻辑分组,您仍将在数据集中拥有每条记录)customerId 并按 transactionDate 排序。

从而提供所需的结果

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM