COUNT(*) FILTER (WHERE MONTH(t.jlsj) = MONTH(SYSDATE)) AS 最新12个月数据提示未找到要求的from关键字
时间: 2024-11-24 09:41:14 浏览: 23
在给定的SQL片段中,`COUNT(*) FILTER (WHERE MONTH(t.jlsj) = MONTH(SYSDATE)) AS 最新12个月数据`这部分实际上是一个错误,因为`FILTER`子句通常在SQL Server中使用,而在标准的SQL中并不常见。然而,如果我们要理解其意图,它应该是尝试在一个特定的上下文中计算过去12个月(从`SYSDATE`开始)内`t.jlsj`字段对应于当前月份的记录数。
正确的语法应该是:
```sql
COUNT(*) OVER (
PARTITION BY TRUNC(t.jlsj, 'MONTH')
WHERE MONTH(t.jlsj) = MONTH(SYSDATE)
) AS 最近12个月数据
```
这里我们假设`TRUNC()`函数用于截取日期到月份级别。如果没有明确指定`FROM`关键字,那意味着这个子句可能是在某个上下文(比如窗口函数)中使用的,而前面的`FROM zdtybm t`已经隐含了这个表。
如果你在其他SQL版本如Oracle中,你可以直接使用`MONTH()`函数,但同样需要确保在正确的上下文中使用。如果实际环境中不存在`FILTER`这样的语法,那么你需要另外的方式来处理这个条件,例如:
```sql
SELECT
TO_CHAR(t.jlsj, 'YYYYMM') AS 月份,
COUNT(*) OVER (
PARTITION BY TO_CHAR(t.jlsj, 'YYYYMM')
ORDER BY t.jlsj DESC
) AS count总数,
SUM(CASE WHEN MONTH(t.jlsj) = MONTH(SYSDATE) THEN 1 ELSE 0 END) OVER () AS 最新12个月数据
FROM zdtybm t
WHERE t.jlsj IS NOT NULL
AND TO_DATE(t.jlsj, 'yyyy/mm/dd HH24:mi:ss') BETWEEN SYSDATE - INTERVAL '11' MONTH AND SYSDAY - 1
ORDER BY t.jlsj;
```
这里通过CASE表达式来判断是否在最近12个月内。
阅读全文
相关推荐














