在使用 MySQL 多年后,我刚刚开始在 Oracle 数据库中工作,我对分组差异有点困惑。作为起点,假设我有这张
project
表:
id | 名字 | 已创建 |
---|---|---|
1 | 创建于9月2日 | 02-09-2023 00:00:00:000 |
2 | 创建于9月3日 | 03-09-2023 00:00:00:000 |
3 | 创建于10月2日 | 02-10-2023 00:00:00:000 |
4 | 创建于10月3日 | 2023 年 10 月 3 日 00:00:00:000 |
5 | 创建于10月4日 | 2023 年 4 月 10 日 00:00:00:000 |
6 | 创建于11月1日 | 2023 年 1 月 11 日 01:00:00:000 |
我正在尝试编写一个查询,以最终如下所示的格式给出在提供的日期范围内每个月内创建的
projects
的数量(例如 01-08-2023 00:00:00:000
到 04-12-2023 00:00:00:000
):
项目已创建 | 日期 |
---|---|
0 | 2023 年 8 月 |
2 | 2023 年 9 月 |
3 | 2023 年 10 月 |
1 | 2023 年 11 月 |
0 | 2023 年 12 月 |
我将如何实现这一目标?到目前为止,我所有的尝试都以遇到各种与
GROUP BY
相关的 Oracle 错误(例如“ORA-00979”)而告终。
如果有帮助,这是我在 MySQL 中用来完成此操作的查询:
SELECT
Count(DISTINCT p.id) AS projectsCreated,
Date_format(p.created, '%b %Y') AS date
FROM
project p
WHERE
(
Unix_timestamp(p.created) >= Unix_timestamp('01-08-2023 00:00:00')
AND Unix_timestamp(p.created) <= Unix_timestamp('04-12-2023 00:00:00')
)
GROUP BY
date
ORDER BY
p.created ASC;
感谢您提供的所有帮助。
编辑:
这是我迄今为止最接近的:
SELECT
COUNT(p.id) as "COUNT(p.id)",
TO_CHAR(p.created, 'Mon YYYY') as "createdDate"
FROM
project p
WHERE (
p.created >= to_timestamp('2023-08-01 00:00:00', 'YYYY-MM-DD HH24:mi:SS')
AND p.created <= to_timestamp('2023-12-04 00:00:00', 'YYYY-MM-DD HH24:mi:SS')
)
GROUP BY p.id, TO_CHAR(p.created, 'Mon YYYY');
这给了我这样的结果:
CREATE TABLE project (
id NUMBER PRIMARY KEY,
name VARCHAR2(255),
created TIMESTAMP
);
INSERT INTO project (id, name, created) VALUES
(1, 'Created on September 2nd', TO_TIMESTAMP('02-09-2023 00:00:00:000', 'DD-MM-YYYY HH24:MI:SS:FF3')),
(2, 'Created on September 3rd', TO_TIMESTAMP('03-09-2023 00:00:00:000', 'DD-MM-YYYY HH24:MI:SS:FF3')),
(3, 'Created on October 2nd', TO_TIMESTAMP('02-10-2023 00:00:00:000', 'DD-MM-YYYY HH24:MI:SS:FF3')),
(4, 'Created on October 3rd', TO_TIMESTAMP('03-10-2023 00:00:00:000', 'DD-MM-YYYY HH24:MI:SS:FF3')),
(5, 'Created on October 4th', TO_TIMESTAMP('04-10-2023 00:00:00:000', 'DD-MM-YYYY HH24:MI:SS:FF3')),
(6, 'Created on November 1st', TO_TIMESTAMP('01-11-2023 01:00:00:000', 'DD-MM-YYYY HH24:MI:SS:FF3'));
查询:
SELECT
Count(DISTINCT p.id) AS projectsCreated,
TO_CHAR(p.created, 'Mon YYYY') AS dates
FROM
project p
WHERE
created BETWEEN TO_TIMESTAMP('01-08-2023 00:00:00:000', 'DD-MM-YYYY HH24:MI:SS:FF3')
AND TO_TIMESTAMP('04-12-2023 00:00:00:000', 'DD-MM-YYYY HH24:MI:SS:FF3')
GROUP BY
TO_CHAR(p.created, 'Mon YYYY')
ORDER BY
TO_CHAR(p.created, 'Mon YYYY') ASC;
项目已创建 | 日期 |
---|---|
1 | 2023 年 11 月 |
3 | 2023 年 10 月 |
2 | 2023 年 9 月 |