首页 > 解决方案 > 从表中排序日期

问题描述

我在 PostgreSQL 中有下表,我想显示每个 fname 的最大销售数字以及相关的销售日期。请帮助我提供解决方案代码。

CREATE TABLE CookieSale (
  ID VARCHAR(4),
  fname VARCHAR(15),
  sale FLOAT,
  saleDate DATE
);

INSERT INTO CookieSale
VALUES
('E001', 'Linda', 1000.00, '2016-01-30'),
('E002', 'Sally', 750.00, '2016-01-30'),
('E003', 'Zindy', 500.00, '2016-01-30'),
('E001', 'Linda', 150.00, '2016-02-01'),
('E001', 'Linda', 5000.00, '2016-02-01'),
('E002', 'Sally', 250.00, '2016-02-01'),
('E001', 'Linda', 250.00, '2016-02-02'),
('E002', 'Sally', 150.00, '2016-02-02'),
('E003', 'Zindy', 50.00, '2016-02-02');

我试过了

SELECT fname, MAX(sale), saleDate 
FROM CookieSale;

我需要结果像

"Lynda | 5000.00 | 2016-02-01"

标签: postgresqlgreatest-n-per-group

解决方案


您的描述与预期结果不一致。描述说“每个 fname 的最大销售数字”,但预期结果仅表示总体最大值。两者都与标题无关。请尝试更加一致。
我将描述作为实际想要的。为此,在子选择中使用 Window 函数 RANK,而外部选择只需排名 1。

select fname, sale, saledate
  from ( select cs.*, rank() over (partition by fname order by fname, sale desc) rk
           from cookiesales cs
       ) csr          
 where rk = 1;

推荐阅读