oracle 每月最后一天计算每季度的总项目数

mkh04yzy  于 2023-04-05  发布在  Oracle
关注(0)|答案(1)|浏览(134)

我有一个表,其中有多个项目的记录与创建日期在过去几年中.我需要计算所有的项目,是在每个月的最后一天创建,然后得到计算其季度为每年通过总结所有项目在其月份.该表如下:
| 项目代码|创建日期|区位|项目类型|
| --------------|--------------|--------------|--------------|
例如:1月31日创建的项目+2月28日创建的项目+3月31日创建的项目。2023年= 500和4月30日+5月31日+6月30日= 200等。注意,根据年份,2月有时是28,有时是29(仅计算在该月最后一天创建的项目,而不是该月的所有项目)
结果是
| 项目总数|年份|季度|
| --------------|--------------|--------------|
| 五百|二零二三年|1|
| 两百|二零二三年|第二章|
谢谢大家。

wgeznvg7

wgeznvg71#

您可以用途:

SELECT TO_CHAR(TRUNC(creation_date, 'Q'), 'YYYY') AS year,
       TO_CHAR(TRUNC(creation_date, 'Q'), 'Q') AS quarter,
       COUNT(item_code) AS total_items
FROM   table_name
WHERE  creation_date >= LAST_DAY(TRUNC(creation_date))
GROUP BY TRUNC(creation_date, 'Q')

其中,对于示例数据:

CREATE TABLE table_name (item_code, Creation_date, location, Item_type) AS
SELECT 1, DATE '2023-01-01', 'x', 'y' FROM DUAL UNION ALL
SELECT 1, DATE '2023-01-31' + INTERVAL '1' HOUR, 'x', 'y' FROM DUAL UNION ALL
SELECT 1, DATE '2023-02-01' + INTERVAL '1' HOUR, 'x', 'y' FROM DUAL UNION ALL
SELECT 1, DATE '2023-02-28' + INTERVAL '1' HOUR, 'x', 'y' FROM DUAL UNION ALL
SELECT 1, DATE '2023-04-28' + INTERVAL '1' HOUR, 'x', 'y' FROM DUAL UNION ALL
SELECT 1, DATE '2023-04-30' + INTERVAL '1' HOUR, 'x', 'y' FROM DUAL UNION ALL
SELECT 1, DATE '2023-04-30' + INTERVAL '2' HOUR, 'x', 'y' FROM DUAL;

输出:
| 年份|季度|总计_项目|
| --------------|--------------|--------------|
| 二零二三年|1|第二章|
| 二零二三年|第二章|第二章|
fiddle

相关问题