编写视图:oracle数据库,库名:zdtybm,涉及到的字段有JLSJ(该字段使用到月份筛选,字段类型date),zddm,需要实现zddm数据的count总数、统计最新的12个月的数据、月份字段中的数据以数字形式显示、按月份统计,每个月只统计每个月新增的数据
时间: 2024-11-24 13:41:58 浏览: 9
在Oracle数据库中,你可以使用CREATE VIEW命令编写一个视图来满足这些需求。假设你想创建一个名为`monthly_new_records`的视图,可以参考以下SQL代码:
```sql
CREATE OR REPLACE VIEW monthly_new_records AS
(
SELECT
TO_CHAR(JLSJ, 'YYYYMM') AS month_num, -- 将日期转换为月份格式
COUNT(DISTINCT CASE WHEN MONTH(JLSJ) = MONTH(SYSDATE) THEN zddm ELSE NULL END) AS monthly_count -- 统计当月新增记录
FROM zdtybm
WHERE JLSJ BETWEENADD_MONTHS(SYSDATE, -12), SYSDATE -- 只取最近12个月的数据
GROUP BY TO_CHAR(JLSJ, 'YYYYMM')
);
-- 这个视图会展示每个月份的新增zddm计数,月份是以数字形式的年月(如202301)
```
此视图会返回每个月份的新增`zddm`计数,只考虑了最新的12个月内的数据。请注意,`TO_CHAR`函数用于将日期转换成`YYYYMM`格式,`MONTH()`函数则用于比较当前月和历史记录中的月份。
如果你需要获取每个月的具体统计数据,只需运行以下查询:
```sql
SELECT * FROM monthly_new_records;
--
相关问题
oracle数据库,库名:zdtybm,涉及到的字段有JLSJ(该字段使用到月份筛选,字段类型date),zddm,需要实现zddm数据的count总数、统计最新的12个月的数据、月份字段中的数据以数字形式显示、按月份统计,每个月只统计每个月新增的数据
在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,以此确定是否是新增的数据。
阅读全文