【问题标题】:SQL group by "date" questionSQL按“日期”分组问题
【发布时间】:2010-10-17 21:16:59
【问题描述】:

我正在尝试制作报告,但我的宿敌 SQL 出现问题。

我有一个存储交易结束日期的表格。

我想知道每月有多少交易所以我做了:

SELECT trunct( closedate, 'MONTH' ) FROM  MY_TRANSACTIONS 

我正在使用 oracle。

我得到一个这样的列表:

2002-09-01 00:00:00.0
2002-09-01 00:00:00.0
...
2002-10-01 00:00:00.0
2002-10-01 00:00:00.0
...
2002-11-01 00:00:00.0
2002-11-01 00:00:00.0

等等。

所以我想“如果我在 select 中添加 COUNT() 并在语句末尾添加 GROUP BY”,但事实并非如此。我的猜测是因为每条记录都被视为不同的值:-S

有什么提示吗?

谢谢。

【问题讨论】:

  • @Joel:感谢您的重新标记。这真的是 PL-SQL 吗?
  • @Oscar:以这种方式使用 TRUNC() 是 Oracle 特有的。但是您在 GROUP BY 中看到的问题与供应商无关;这就是任何符合 SQL 的实现的工作原理。

标签: sql oracle plsql group-by truncate


【解决方案1】:

您想按所有非聚合字段进行分组。而且你不想截断日期,你想要日期的月份部分。

有点像

select to_char(datefield, 'Month'), count(*) from ... group by to_char(datefield, 'Month');

【讨论】:

  • to_char(datefield, 'Month') 应该这样做
  • @Arnshea:确实(部分)因为我认为是过去几年所有 12 月的总和......
  • 试试 to_char(datefield, 'MONTH YYYY')
  • 最好的形式是:TRUNC(datefield, 'Mon') 截断日期后的天、小时、分钟、秒。
  • TRUNC 会稍微高效一些,但你可能还是想格式化输出......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-09
  • 2010-10-30
  • 2012-02-19
  • 2014-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多