oracle数据库,库名:zdtybm,涉及到的字段有JLSJ(该字段使用到月份筛选,字段类型date),zddm,需要实现zddm数据的count总数、统计最新的12个月的数据、月份字段中的数据以数字形式显示、按月份统计,每个月只统计每个月新增的数据
时间: 2024-11-24 21:42:09 浏览: 9
在Oracle数据库中,你可以使用`DATE_TRUNC`函数结合`LAG`函数来实现对`zdtybm`库中的`zddm`字段进行计数并仅统计最新12个月的数据,同时将月份转换为数字形式。以下是相应的SQL查询示例:
```sql
WITH months_data AS (
SELECT
DATE_TRUNC('MONTH', JLSJ) AS month_num, -- 转换为月份
COUNT(DISTINCT zddm) OVER (PARTITION BY EXTRACT(YEAR_MONTH FROM JLSJ)) AS monthly_count, -- 新增数据计数
LAG(month_num, 1) OVER (ORDER BY JLSJ) AS prev_month_num -- 前一个月的月份数
FROM zdtybm
WHERE JLSJ IS NOT NULL
)
SELECT
month_num,
COALESCE(monthly_count, 0) AS count -- 处理第一个月可能存在无前月的情况
FROM
(
SELECT * FROM months_data
WHERE month_num = ADD_MONTHS(CURRENT_DATE, -12) -- 获取最新12个月的数据
) subquery
WHERE
NVL(prev_month_num, DATE_TRUNC('MONTH', SYSDATE - INTERVAL '1 MONTH')) + 1 = month_num -- 检查是否为新添加的数据
ORDER BY
month_num;
```
这个查询首先计算每个月份的新增`zddm`记录数,并通过`LAG`获取上一月的月份数。然后,它过滤出最新12个月的数据,并检查当前月数是否是上个月加1,以此确定是否是新增的数据。
阅读全文