使用group by子句从postgres表中选择最小日期

时间:2014-06-17 19:19:51

标签: sql postgresql

我有一张表格,其中包含公司名称,员工姓名,休假天数。我想提取员工的公司名称和最短约会日期。为此,我使用此查询

select companyname, min(date) from table where companyname = 'apple' and employeename = 'ABC'

然而,此查询无法说明该列" tablename.companyname"必须出现在GROUP BY子句中或用于聚合函数。

我确实尝试在group by子句中使用companyname以及日期,但这给了我很多值而不是一个最小日期。

任何人都可以在不增加复杂性的情况下弄清楚如何做到这一点。

我确实找到了解决方案。但是,我并不完全理解为什么它要求我在group by子句中使用companyname。

1 个答案:

答案 0 :(得分:2)

标准SQL要求是GROUP BY未聚合的列。

SELECT companyname, min(date) AS min_date
FROM   tbl
WHERE  companyname = 'apple'
AND    employeename = 'ABC'
GROUP  BY comoanyname;

您可以使用位置参考来缩短Postgres中的代码:

...
GROUP  BY 1;

或从companyname列表中删除预定列SELECT。那么你也不需要GROUP BY

SELECT min(date) AS min_date
FROM   tbl
WHERE  companyname = 'apple'
AND    employeename = 'ABC';