【问题标题】:sql query for Last 5 years and group by?过去 5 年的 sql 查询和分组依据?
【发布时间】:2013-08-14 22:24:14
【问题描述】:

我是 SQL 新手,我正在研究 DB2,我需要获取过去 5 年的 x 和 y 的总和作为 id。

以下是到目前为止我已经完成的查询,但是,我只需要获得最近 5 年的数据,这可以让我获得所有年份的数据。我试图为 sql 语句添加前 5 名,它似乎不起作用,它显示了一些错误。如何修改此查询以仅获取最近 5 年的数据?

select (sum(X) + sum(Y)) as tot,some_date
from table where fkid = 1 
group by year order by year desc;

以下是我期望的数据格式。

总年份
552,074.78 2012-01-01 466,283.62 2011-01-01 640,813.37 2010-01-01 721,182.28 2009-01-01 719,676.05 2008-01-01

我得到的错误如下

错误:DB2 SQL 错误:SQLCODE=-104, SQLSTATE=42601, SQLERRMC=5;VALUE ( CONCAT || / - + FROM INTO * , \ AS . YEAR, DRIVER=3.58.81 SQLState:42601 错误代码:-104 错误:DB2 SQL 错误:SQLCODE=-514,SQLSTATE=26501,SQLERRMC=SQL_CURLH200C1,DRIVER=3.58.81 SQL状态:26501 错误代码:-514

编辑:列中有日期类型,列名不是年份,例如,我已将其修改为 some_year。

【问题讨论】:

  • 如果它显示 some 错误,你显然需要做 some 来修复你的查询。首先说明您的 DB2 平台和版本。还包括您的查询示例数据和所需的输出。

标签: sql group-by db2 sum


【解决方案1】:

您的查询问题很简单(假设这是唯一的问题)。 year 是保留字,所以用双引号括起来:

select (sum(X) + sum(Y)) as tot, "year"
from table
where fkid = 1 
group by "year"
order by "year" desc;

获得过去五年是另一回事。根据year 列,您可以:

select (sum(X) + sum(Y)) as tot, "year"
from table
where fkid = 1 and year >= year(current timestamp) - 5
group by "year"
order by "year" desc;

或者,您实际上可能有另一列具有可以使用的日期时间,而不是 "year"

编辑:

如果您有一个名为 dt 的列是日期,您可以使用:

select (sum(X) + sum(Y)) as tot, year(dt) as "year"
from table
where fkid = 1 and dt >= CURRENT DATE - 5 years and dt <= CURRENT DATE
group by year(dt)
order by year(dt) desc;

如果您只想要一行包含总和,请省略 group by 子句。

【讨论】:

  • 没关系,我想通了。谢谢。稍微搜索一下就有所帮助。
  • >select (sum(X) + sum(Y)) as tot, some_year from table where fkid = 1 and year(some_year) >= year(current timestamp) - 5 group by some_year order by some_year desc;
猜你喜欢
  • 2022-11-17
  • 1970-01-01
  • 1970-01-01
  • 2022-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多