我需要从2016年到今天每月显示我的数据

时间:2018-05-09 11:16:13

标签: sql oracle oracle11g group-by

我有一个产品表,我想知道从2016年到现在每月的产品数量。

Example:
January     15    2016
February    25    2016
March       05    2016
April       12    2016

我正在使用此Oracle查询:

SELECT TO_CHAR(LOGIN_DATE, 'Month') As "Month",
       login_date, 
       Count(TO_CHAR(LOGIN_DATE, 'Month')) 
from Product 
group by TO_CHAR(LOGIN_DATE, 'Month')"

但它显示的错误不是按表达式分组。

需要这方面的建议。

2 个答案:

答案 0 :(得分:0)

在嵌套SQL中使用EXTRACT函数是正确的:

TFDPhysODBCDriverBase.FindBestDriver

{{3}}

答案 1 :(得分:0)

问题是您的SELECT语句中有一列既未汇总也未包含在GROUP BY子句中(login_date):

SELECT TO_CHAR(LOGIN_DATE, 'Month') As "Month",
       login_date, 
       ^^^^^^^^^^^
       Count(TO_CHAR(LOGIN_DATE, 'Month')) 
  from Product 
 group by TO_CHAR(LOGIN_DATE, 'Month')

我怀疑你想要更像以下内容(请记住COUNT(*)Count(TO_CHAR(LOGIN_DATE, 'Month'))更直观 - 而且你也不必担心login_dateSELECT TO_CHAR(login_date, 'Month YYYY'), COUNT(*) FROM product GROUP BY TO_CHAR(login_date, 'Month YYYY'); 的情况NULL):

TO_CHAR()

请注意,我还在TRUNC(login_date, 'MONTH')的日期掩码中包含了年份 - 否则您将承担两个月的风险(例如,2016年1月和2017年1月)计算在一起进行汇总。我个人会使用SELECT TRUNC(login_date, 'MONTH'), COUNT(*) FROM product GROUP BY TRUNC(login_date, 'MONTH'); (这将在本月的第一天返回)并将格式保留给客户端:

running_inds = {}
for rec in SeqIO.parse("concatenate_0035_0042_dna2.fa", "fasta"):

希望这有帮助。