Sql 选择月份&;Oracle中特定范围之间的年份

Sql 选择月份&;Oracle中特定范围之间的年份,sql,oracle,Sql,Oracle,我的表中有一列名为Notenum,每插入一次,该列就会增加1。在过去的几年里,它有大约200万条记录 我想知道notenum列在一段时间内增加了多少(基本上是平均值)。我不一定需要从查询返回平均值。我可以一年一年或者一个月一个数字地画出来 比如说,我想知道在过去的6个月、2年等时间里它增加了多少 这是我试图运行的查询,但出现以下错误:ORA-00933:Sql命令未正确结束。这是PL/SQL SELECT TO_CHAR(systemts, 'mm') Month, TO_CHAR(system

我的表中有一列名为Notenum,每插入一次,该列就会增加1。在过去的几年里,它有大约200万条记录

我想知道notenum列在一段时间内增加了多少(基本上是平均值)。我不一定需要从查询返回平均值。我可以一年一年或者一个月一个数字地画出来

比如说,我想知道在过去的6个月、2年等时间里它增加了多少

这是我试图运行的查询,但出现以下错误:ORA-00933:Sql命令未正确结束。这是PL/SQL

SELECT TO_CHAR(systemts, 'mm') Month, TO_CHAR(systemts, 'yyyy') YEAR, notenum
FROM nsa_fl.polnote
WHERE systemts
    BETWEEN to_date('01/01/2013', 'mm-dd-yyyy')
    AND to_date('01/01/2014', 'mm-dd-yyyy')
GROUP BY TO_CHAR(systemts, 'mm') Month, TO_CHAR(systemts, 'yyyy') YEAR, notenum
我通读了这篇文章,但我只了解到了这一点


谢谢您的帮助。

您的查询有两个问题。首先,您有一个GROUPBY子句,它没有像sum()或count()这样的聚合。导致错误消息的原因是group by子句有别名。

我认为您想要的值是每个时间段内的最小值和最大值之间的差值
notenum

SELECT TO_CHAR(systemts, 'yyyy-mm') as yyyymm,
       max(notenum) - min(notenum) + 1 as notenum_range
FROM nsa_fl.polnote
WHERE systemts >= to_date('2013-01-01', 'yyyy-mm-dd') AND
      systemts < to_date('2014-01-01', 'yyyy-mm-dd')
GROUP BY TO_CHAR(systemts, 'yyyy-mm');
选择将字符(systemts,'yyyy-mm')作为yyyymm,
最大值(notenum)-最小值(notenum)+1作为notenum\u范围
来自nsa_fl.polnote
其中systemts>=截止日期(“2013-01-01”、“yyyy-mm-dd”)和
系统<截止日期('2014-01-01','yyyy-mm-dd')
分组到字符(systemts,'yyyy-mm');
我还做了以下修改:

  • 我把年份和月份合并成一列
  • 我将之间的
    更改为两个比较。这确保您不会从2014-01-01获得任何数据
  • 我将日期格式修改为yyyy-mm-dd。在我看来,使用ISO标准格式是一个好习惯
  • 我从
    groupby
    子句中删除了无关的
    notenum

因此,由于我试图“计算”给定时间内的notenum数,是否需要将其添加到select?Gordon,我想这就是我要查找的,但我得到了一个错误:“From关键字不在预期的位置”。列别名是
yyyy mm
而不是
yyyyymm
。嗨,Gordon,我有一个疑问,如果缺少一些notenum,它会给出正确的结果吗?例如,对于2014年1月,最大notenum为1000,最小notenum为900,notenum 981至990的行被删除-在这个例子中,2014年1月实际有90个notenum,但查询结果将为100。如果我错了,请纠正我。