在做会员管理模块的时候,有这样一个需求,预存分为许多期,列表展示时需要查询出上期余额,本期余额,日报表倒是很好办,因为数据库中已经存了上期余额,关键是按月查询时,上期余额是上个月的最后一天的上期余额。
后来看了Oracle数据库中的函数,写出以下语句就搞定:
<select id="queryMerchantPrepayByMonth" parameterClass="java.util.HashMap" resultMap="merchantPrepayMap">
select to_char(to_date(day,'yyyy-mm-dd'),'yyyy-mm') as transTime,
(
select PREVIOUS_BALANCE_AMOUNT/100 as PREVIOUS_BALANCE_AMOUNT
from report_account_prepay_statis
where day =
to_char(
last_day( add_months(to_date(raps.month,'yyyy-mm'),-1) )
,'yyyy-mm-dd')
and store_id = 'merchant'
and merchant_id =#merchantId#
)
as PREVIOUS_BALANCE_AMOUNT ,
(
select BALANCE_AMOUNT/100 as BALANCE_AMOUNT
from report_account_prepay_statis
where day =
(
case
when raps.month < substr(#endDate#,1,7)
then
to_char(
last_day(
to_date(raps.month,'yyyy-mm')
)
,'yyyy-mm-dd'
)
else #endDate#
end
)
and store_id = 'merchant'
and merchant_id = #merchantId#
)
as BALANCE_AMOUNT,
sum(PREPAY_AMOUNT/100) as PREPAY_AMOUNT ,
sum(CONSUME_AMOUNT/100) as CONSUME_AMOUNT ,
sum(OVERDUE_AMOUNT/100) as OVERDUE_AMOUNT,
sum(DELAY_AMOUNT/100) as DELAY_AMOUNT
from report_account_prepay_statis raps
where merchant_id=#merchantId# and store_id='merchant'
and to_char(to_date(day,'yyyy-mm-dd'),'yyyy-mm-dd')
between #startDate# and #endDate#
group by to_char(to_date(day,'yyyy-mm-dd'),'yyyy-mm'),month
order by month
</select>
也就是day =
to_char(
last_day( add_months(to_date(raps.month,'yyyy-mm'),-1) )
,'yyyy-mm-dd')
最关键了。
这里的raps.month是一个VARCHAR2类型的数值。举例说明,假如这个值是2011-01,那么它的结果是2010-12-31号,
select
to_char(
last_day( add_months(to_date('2011-01','yyyy-mm'),-1) )
,'yyyy-mm-dd') from dual
分享到:
相关推荐
根据给定的文件信息,以下是对“Ibatis常用SQL语句”的详细解析,涵盖了一系列Ibatis在数据操作中的应用实例。 ### Ibatis简介 Ibatis是一个支持普通SQL查询、存储过程以及高级映射的优秀持久层框架。Ibatis可以让...
iBatis是一个轻量级的Java持久层框架,它提供了SQL映射框架,将SQL语句与Java代码分离,使得数据库访问更为灵活和可控。在本压缩包中,你将找到一系列关于iBatis的学习资源,包括PDF文档、实例代码等,这些都是深入...
Ibatis 是一款著名的轻量级 Java 持久层框架,它提供了一种映射 SQL 和 Java 对象的简单方式,从而减轻了开发人员在数据库操作中的工作负担。这篇实例教程将带你深入理解 Ibatis 的核心概念和常用功能,帮助你快速...
最后,Ibatis的事务管理也是一个重要的部分。通过Ibatis的TransactionManager,我们可以控制事务的开启、提交、回滚等行为,确保数据的一致性。在"ibatistest2"项目中,我们可以看到如何结合Spring框架进行事务管理...
在本实例中,我们可能看到一个具体的 DAO 类,它是如何通过 iBATIS API 来执行 SQL 查询的。 描述中提到的博客链接可能提供了详细的步骤和代码示例,但这里我们可以先概括一下 iBATIS 的关键特性: 1. **SQL 映射...
每个需要进行O/R Mapping的Java类都会有一个对应的XML配置,用于定义SQL语句和结果集映射。 在Java对象方面,我们有`example.Account`类,包含username和password两个属性,以及对应的getter和setter方法。这个类将...
Ibatis是一个轻量级的Java持久层框架,它允许开发者将SQL语句直接写在配置文件中,与传统的JDBC相比,提供了更加灵活和易于维护的解决方案。 Ibatis的主要优点包括: 1. **简化JDBC代码**:Ibatis通过XML或注解...
Ibatis.net是一个轻量级的持久层框架,它在.NET环境中提供了灵活的数据访问接口,能够有效地将业务逻辑和数据访问层解耦。本教程将深入探讨Ibatis.net的学习与实践,帮助开发者更好地理解和掌握这个强大的工具。 ...
IBatis(现在称为MyBatis)是一个轻量级的持久层框架,它允许开发者将SQL语句直接嵌入到应用程序代码中,从而避免了传统的ADO.NET模式带来的复杂性。通过使用XML或注解来配置和映射SQL,IBatis使得数据访问更加灵活...
Ibatis是一个优秀的Java持久层框架,它简化了数据库操作,允许开发者直接编写SQL语句,避免了ORM(对象关系映射)框架的一些复杂性。然而,尽管Ibatis提供了灵活性,但为每个表创建对应的XML映射文件仍然是一个耗时...
在iBatis中,可以定义一个`<insert>`标签,其中包含SQL语句,然后在Java代码中调用SqlSession的`insert()`方法,传入映射ID和参数对象。 2. 读取(Retrieve):读取数据通常使用SELECT语句。`<select>`标签定义了...
在IT行业中,数据库访问是应用程序的核心部分,而IBatis作为一个优秀的持久层框架,极大地简化了这一过程。本教程将深入探讨IBatis的开发实例,帮助开发者更好地理解和运用这个强大的工具。 **IBatis简介** IBatis...
iBATIS是一个持久层框架,它允许开发者将SQL语句直接写在XML配置文件中,实现了SQL与Java代码的分离,简化了数据访问层的开发工作。这篇教程通过详细的讲解和实例,帮助读者理解和掌握iBATIS的核心功能和使用技巧。 ...
iBatis 是一款著名的开源持久层框架,它允许开发者将SQL语句直接写在XML配置文件中,提供了灵活的数据库交互方式,避免了过多的JDBC代码和手动设置参数以及获取结果集。在这个"iBatis Web用法实例"中,我们将深入...
Ibatis,又称为SQL Map,是一个优秀的持久层框架,它允许程序员将SQL语句直接写在配置文件中,与Java代码进行分离,从而降低了数据库操作的复杂性,提高了开发效率。Ibatis的主要目标是简化数据访问层(DAL)的实现...
本文将围绕“IBATIS开发使用实例”这一主题,深入解析复杂SQL查询的应用,尤其是如何利用SQL进行多表关联、条件筛选以及聚合函数的使用。 ### IBATIS简介 IBATIS,现被称为MyBatis,是一种优秀的持久层框架,它...
iBatis是一个轻量级的Java持久层框架,它提供了SQL映射框架,将SQL语句与Java代码分离,使得开发者能够更灵活地控制数据库操作。在这个“iBatis入门实例详细代码”中,我们将深入探讨如何使用iBatis与MySQL数据库...
在这个项目中,我们可以通过一系列步骤来了解如何使用 Ibatis 来进行数据库操作。 ##### 2.1 领域对象与映射文件 在 Spring 宠物店项目中,一个示例领域对象为 `Product` 类,如代码10.13所示。这个类代表了一个...
在这个"ibatis 完整实例"中,我们将会探讨如何使用 Ibatis 2.0 版本来搭建和运行一个实际的项目,以及它所带来的诸多优势。 首先,让我们了解 Ibatis 的核心概念。Ibatis 提供了 XML 配置文件,用于定义 SQL 映射...