按日期合并数据

时间:2016-05-19 07:19:07

标签: java

我有以下使用Hibernate NamedQuery

从数据库中获取的数据
  TXN_ID   END_DATE 
---------- ------------
       121 15-JUN-16
       122 15-JUN-16
       123 16-MAY-16 

每个行数据都可以存储在Java类Object中。 现在我想根据END_DATE组合数据。如果END_DATE相同,则合并TXN_ID数据。

从上面的数据输出将是:

TXN_ID     END_DATE 
---------- ------------
121|122    15-JUN-16
123        16-MAY-16   

我想在java中执行此程序。什么是简单的程序?

2 个答案:

答案 0 :(得分:0)

使用接受的函数printMap,遍历hashmap以查看输出是否正确。

使用以下代码:

public static void main(String[] args) {
    String[][] b = {{"1","15-JUN-16"},{"2","16-JUN-16"},{"3","13-JUN-16"},{"4","16-JUN-16"},{"5","17-JUN-16"}};
    Map<String, String> mapb = new HashMap<String,String>();

    for(int j=0; j<b.length; j++){
        String c = mapb.get(b[j][1]);
        if(c == null)
            mapb.put(b[j][1], b[j][0]);
        else
            mapb.put(b[j][1], c+" "+b[j][0]);
    }
    printMap(mapb);
}

您将获得以下输出:

13-JUN-16 = 3
16-JUN-16 = 2 4
17-JUN-16 = 5
15-JUN-16 = 1

我认为这可以解决您的问题。

答案 1 :(得分:0)

使用hibernate,您可以将查询结果放入对象列表

Query q = session.createSQLQuery( sql ).addEntity(ObjDataQuery.class);
List<ObjDataQuery> res = q.list();

现在您可以创建一个hashmap来存储最终结果,以填充此对象,您可以迭代res

Map<String, String> finalResult= new HashMap<>();
for (int i=0; i<res.size(); i++){
    if (finalResult.get(res.get(i).date!=null){
       //new element
       finalResult.put(res.get(i).date,res.get(i).txn)
    } else {
       //update element
       finalResult.put(res.get(i).date,
                       finalResult.get(res.get(i).date) + res.get(i).txn)
    }
}

我没有按逻辑测试它应该是正确的。

另一种方法是更改​​查询以直接获得最终结果(在oracle中查看LISTAGG)