我正在使用snowflake从数据中获取一些信息.我有一个表,其中同一个员工(PRS\U ID)可以包含在多行中,我想 for each 员工(PRS\U ID)取最早的日期(BGN\U日期).接下来,我想看看我每个月有多少员工.

理想情况下,如果我可以有YYYY-MM格式(YYYYMM也可以).我的工作内容如下:

SELECT PRS_ID, MIN(BGN_DATE), MONTH(BGN_DATE)
FROM myTable
WHERE EMP_STS = 'T' 
GROUP BY PRS_ID, MONTH(BGN_DATE)

但是,这将显示每个员工的数据(PRS_ID),这太精细了(如上所述).但当我从分组中删除"PRS\u ID"时,我得到以下错误:

SQL compilation error: error line 1 at position 7 'myTable.PRS_ID' in select clause is neither an aggregate nor in the group by clause.

有人知道怎么修吗?

非常感谢.

Sample Data:

PRS_ID EMP_STS BGN_DATE
homsimps T 2022-01-30
homsimps T 2022-02-28
homsimps T 2022-03-30
bartsimps T 2022-01-30
bartsimps T 2022-02-28
bartsimps T 2022-03-31
lisasimps T 2022-04-30
lisasimps T 2022-05-31
lisasimps T 2022-06-30
lisasimps T 2022-07-30
margesimps T 2022-02-28
margesimps T 2022-03-30

Expected Outcome:

Period Count
2022-01 2
2022-02 1
2022-03 0
2022-04 1

推荐答案

使用聚合两次:

WITH cte AS (
   SELECT PRR_ID, MIN(BGN_DATE) AS min_bgn_date
   FROM my_table
   WHERE EMP_STS = 'T'
   GROUP BY PRS_ID
)
SELECT TO_VARCHAR(min_bgn_date, 'YYYYMM') AS month, COUNT(*) AS cnt
FROM cte
GROUP BY TO_VARCHAR(min_bgn_date, 'YYYYMM');
-- GROUP BY month

Sql相关问答推荐

使用收件箱运行多个SQL Update字符串,但出现错误

带有双引号的json在Presto中是否有区别对待?

PostgreSQL:获取每家店铺收入最高的员工

用于匹配红旗和绿旗的SQL查询

PostgreSQL:按小时查看调整日期

我可以在SQL的IN子句中使用比子查询包含的值更少的值吗?

将Dense_RANK列为聚合(非解析)函数(&A)

IF NOT EXISTS子查询的性能瓶颈

将一个数组反嵌套到另外两个数组SQL中(Athena/presto)

Proc SQL Select Distinct SAS

存储过程太慢

使用 Oracle SQL Developer 将不同的列值转换为列会导致错误 ORA-01489

从输出中删除 jsonb_build_object

什么是 100.它与 100 有什么区别?

PostgreSQL-用第一个非空填充以前的值

Postgres数据库维护:基于GROUP BY删除旧记录

在 MS Access VBA 中,如何测量显示查询的时间?

postgres按组消除分区中的NULLS

为每组填写行以进行旋转

奇怪的甲骨文行为