我有这张桌子
\d sales_girls
Column | Type | Collation | Nullable | Default
-----------+----------------------+-----------+----------+---------
id | character varying(4) | | |
f_name | character varying(8) | | |
sale | integer | | |
sale_date | date | | |
SELECT * FROM p8.sales_girls;
id | f_name | sale | sale_date
------+--------+------+------------
E001 | Linda | 1000 | 2016-01-30
E002 | Sally | 750 | 2016-01-30
E003 | Zindy | 500 | 2016-01-30
E001 | Linda | 150 | 2016-02-01
E001 | Linda | 5000 | 2016-02-01
E002 | Sally | 250 | 2016-02-01
E001 | Linda | 250 | 2016-02-02
E002 | Sally | 150 | 2016-02-02
E003 | Zindy | 50 | 2016-02-02
(9 rows)
预期输出
我要选择每个女孩中最多的行
id | f_name | sale | sale_date
------+--------+------+------------
E002 | Sally | 750 | 2016-01-30
E003 | Zindy | 500 | 2016-01-30
E001 | Linda | 5000 | 2016-02-01
(9 rows)
我已经尝试过
SELECT id, f_name, MAX(sale), sale_date
FROM p8.sales_girls
GROUP BY f_name;
您可以执行此操作:
select id,f_name,sale,sale_date from (
select id,f_name,sale,sale_date,max(sale) OVER (PARTITION BY id) max_sale from sales_girls
) a where sale=max_sale
但是,如果Lynda有两条销售量为5000的生产线,会发生什么?
如果您希望在此cas中指定最大日期:
select id,f_name,sale,max(sale_date) sale_date from (
select id,f_name,sale,sale_date,max(sale) OVER (PARTITION BY id) max_sale from sales_girls
) a where sale=max_sale
group by 1,2,3
使用PostgreSQL的DISTINCT ON
子句:
SELECT DISTINCT ON (id)
id, f_name, sale, sale_date
FROM p8.sales_girls
ORDER BY id, sale DESC;
您的表格似乎未正确归一化,因为id
似乎标识为“女售货员”。