Sql 选择月份&;Oracle中特定范围之间的年份
我的表中有一列名为Notenum,每插入一次,该列就会增加1。在过去的几年里,它有大约200万条记录 我想知道notenum列在一段时间内增加了多少(基本上是平均值)。我不一定需要从查询返回平均值。我可以一年一年或者一个月一个数字地画出来 比如说,我想知道在过去的6个月、2年等时间里它增加了多少 这是我试图运行的查询,但出现以下错误:ORA-00933:Sql命令未正确结束。这是PL/SQLSql 选择月份&;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
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
yyyy mm
而不是yyyyymm
。嗨,Gordon,我有一个疑问,如果缺少一些notenum,它会给出正确的结果吗?例如,对于2014年1月,最大notenum为1000,最小notenum为900,notenum 981至990的行被删除-在这个例子中,2014年1月实际有90个notenum,但查询结果将为100。如果我错了,请纠正我。