【问题标题】:java financial year wise sum Of Amountjava财政年度明智总和
【发布时间】:2016-04-11 09:28:19
【问题描述】:

我被困在一个查询中,以获取财政年度交易金额的总和。 我的桌子是

TXN_DATE    TXN_AMOUNT
12/01/2014  100
12/08/2014  200
12/01/2015  300
12/04/2015  400
12/04/2013  500

我希望结果显示为

FinYear         Amount
2013-2014       600
2014-2015       500
2015-2016       400

考虑从一年的 4 月 1 日到明年 3 月 31 日的财政年度期间。

数据库 DB2

日期为数据库中的时间戳,示例中指定的日期格式为 dd/MM/yyyy

【问题讨论】:

  • 标记使用的 dbms。 (在日期/时间方面,太多产品与 ANSI SQL 相去甚远。)
  • 目前使用的是DB2数据库
  • 12/01/2014 是指 12 月 1 日还是 1 月 12 日?
  • 没有日期格式是dd/MM/yyyy
  • TXN_DATE 列实际上是字符,还是应有的日期?

标签: sql group-by db2


【解决方案1】:

应该执行以下查询(在 DB2 LUW 中测试):

with temp as (finyear, txn_amount) as (
select case 
         when month(TXN_DATE)< 4 Then year(TXN_DATE)-1 || '-' || year(TXN_DATE)
         else month(TXN_DATE)>= 4 Then year(TXN_DATE) || '-' || year(TXN_DATE)+1
      end as finyear,
      txn_amount
  from test4)
select finyear,         
       sum(txn_amount) as sum_amount
  from temp
 group by finyear;

【讨论】:

  • 将忽略索引。
  • @clockwork-muse 很好,要求是对金额求和吗?没有指定 WHERE 条件来过滤任何内容。那么告诉我在这种情况下您想(以及如何)使用哪个索引?
  • GROUP BY 在进行分桶时也允许使用索引。它还有助于估计查询成本,从而计划执行。当然,是的,因为我们要遍历所有行,所以这不是问题,但仍应坚持良好的风格。如果您可以将其转换为范围查询(开始和结束日期),您可能会使用以日期开头的索引。
  • 不适合我 --- 出现错误 - 错误:DB2 SQL 错误:SQLCODE=-727,SQLSTATE=56098,SQLERRMC=2;-104;42601;finyear|with temp as (| , DRIVER=3.59.81 SQLState: 56098 ErrorCode: -727
【解决方案2】:

SELECT FinYear, cast(sum(Amount) as decimal(16,2)) AS Amount FROM (选择 案子 WHEN TXN_DATE > to_date(year(TXN_DATE) ||'-03-31','YYYY/MM/DD') THEN CONCAT(CONCAT(year(TXN_DATE),'-'),year(TXN_DATE)+1) WHEN TXN_DATE

【讨论】:

    【解决方案3】:

    您可以使用以下查询:

    SELECT FinYear, sum(Amount) AS Amount FROM 
    (SELECT FinYear = 
    CASE 
    WHEN TXN_DATE > char(year(TXN_DATE)) +'0331' THEN char(year(TXN_DATE))+'-'+char(year(TXN_DATE)+1)
    WHEN TXN_DATE < char(year(TXN_DATE)) +'0401' THEN char(year(TXN_DATE)-1)+'-'+char(year(TXN_DATE)) 
    END, 
    TXN_AMOUNT AS Amount
    FROM DB2.Transactions) AS Table1
    GROUP BY FinYear
    

    确保将 DB2.Transactions 替换为 DatabaseName.TableName

    【讨论】:

    • 不工作!--出现错误 错误:DB2 SQL 错误:SQLCODE=-727, SQLSTATE=56098, SQLERRMC=2;-104;42601;=|ROM (SELECT FinYear|CONCAT, DRIVER= 3.59.81 SQLState:56098 错误代码:-727
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多