日终批处理中使用的sql
来源:互联网 发布:undefined index php 编辑:程序博客网 时间:2024/06/06 05:34
卡帐户处理部分:
WITH t AS ( SELECT w.kh,w.jyrq,w.jyje,w.jylx,w.csdm,w.kjyjsq,c.zjjyrq zjjyrq,c.KJYJSQ cur FROM BEPS_WASTEBOOK1 w LEFT JOIN BEPS_CARDACCT c ON w.kh=c.kh where csdm='2153' )
SELECT rq.KH,rq.latestTradeDate,coalesce(xf.consumeSum,0) consumeSum,coalesce(xf.consumeCount,0) consumeCount,coalesce(cz.chargeSum,0) chargeSum,coalesce(cz.chargeCount,0) chargeCount,jsq.jsq ,coalesce(zx.zxje,0) zxje
FROM
(SELECT T.KH, case when MAX(T.JYRQ)>max(zjjyrq) then max(T.JYRQ) else max(zjjyrq) end AS latestTradeDate FROM T GROUP BY KH) rq
LEFT JOIN
(SELECT KH, SUM(JYJE)*100 AS consumeSum ,COUNT(jylx) AS consumeCount FROM t B2 WHERE JYLX='06' AND CSDM='2153' GROUP BY KH) xf
ON rq.kh=xf.kh
LEFT JOIN
(SELECT KH, SUM(JYJE)*100 AS chargeSum ,COUNT(jylx) AS chargeCount FROM t WHERE JYLX='02' AND CSDM='2153' GROUP BY KH) cz
ON rq.kh=cz.kh
LEFT JOIN
(SELECT kh,CASE WHEN kjyjsq>cur THEN kjyjsq ELSE cur END jsq FROM ( SELECT t1.kh,max,min,remax ,cur,CASE WHEN cur-min>6500 THEN remax ELSE max END kjyjsq FROM ( SELECT kh ,max(kjyjsq) max,min(kjyjsq) min,min(cur) cur FROM t GROUP BY kh ) AS t1 LEFT JOIN ( SELECT kh,max(kjyjsq) remax FROM t WHERE t.kjyjsq <t.cur GROUP BY kh ) AS t2 ON t1.kh=t2.kh) AS r) jsq
ON rq.kh=jsq.kh
LEFT JOIN
(SELECT KH,SUM(JYJE)*100 ZXJE FROM t WHERE JYLX='98' GROUP BY KH) AS ZX
ON RQ.KH = ZX.KH
知识点:
1. 使用with语句。
2. 使用case语句。
3. 使用left连接。
最近交易日期,消费,充值,卡交易计数器,注销。
4. 卡交易计数器的计算
记录该卡当前最大的交易序号,包括充值、消费、缴费等
日终批处理时从交易流水帐中取最大号和本值做比较,如果大于本表中的值,用最大号替换本表的值,否则,不做处理
需注意的是,卡片中的卡交易计数器的存储范围是0~65535,当大于65535时卡片中的值会自动清零,重新开始计数,因此,如本表中的值和流水帐中的最小值的差额大于65000时,可认为卡片已重新计数,那么需用重新计数后的最大值替换本表的值
举例:本表的值为65534,流水帐中包含65535、1、2、3四条交易数据,65534 — 1 = 65531,因为65533 大于65000,我们认为卡片已经重新计数,为本表赋值重新计数后的最大值:3。
WITH t AS ( SELECT w.kh,w.jyrq,w.jyje,w.jylx,w.csdm,w.kjyjsq,c.zjjyrq zjjyrq,c.KJYJSQ cur FROM BEPS_WASTEBOOK1 w LEFT JOIN BEPS_CARDACCT c ON w.kh=c.kh where csdm='2153' )
SELECT rq.KH,rq.latestTradeDate,coalesce(xf.consumeSum,0) consumeSum,coalesce(xf.consumeCount,0) consumeCount,coalesce(cz.chargeSum,0) chargeSum,coalesce(cz.chargeCount,0) chargeCount,jsq.jsq ,coalesce(zx.zxje,0) zxje
FROM
(SELECT T.KH, case when MAX(T.JYRQ)>max(zjjyrq) then max(T.JYRQ) else max(zjjyrq) end AS latestTradeDate FROM T GROUP BY KH) rq
LEFT JOIN
(SELECT KH, SUM(JYJE)*100 AS consumeSum ,COUNT(jylx) AS consumeCount FROM t B2 WHERE JYLX='06' AND CSDM='2153' GROUP BY KH) xf
ON rq.kh=xf.kh
LEFT JOIN
(SELECT KH, SUM(JYJE)*100 AS chargeSum ,COUNT(jylx) AS chargeCount FROM t WHERE JYLX='02' AND CSDM='2153' GROUP BY KH) cz
ON rq.kh=cz.kh
LEFT JOIN
(SELECT kh,CASE WHEN kjyjsq>cur THEN kjyjsq ELSE cur END jsq FROM ( SELECT t1.kh,max,min,remax ,cur,CASE WHEN cur-min>6500 THEN remax ELSE max END kjyjsq FROM ( SELECT kh ,max(kjyjsq) max,min(kjyjsq) min,min(cur) cur FROM t GROUP BY kh ) AS t1 LEFT JOIN ( SELECT kh,max(kjyjsq) remax FROM t WHERE t.kjyjsq <t.cur GROUP BY kh ) AS t2 ON t1.kh=t2.kh) AS r) jsq
ON rq.kh=jsq.kh
LEFT JOIN
(SELECT KH,SUM(JYJE)*100 ZXJE FROM t WHERE JYLX='98' GROUP BY KH) AS ZX
ON RQ.KH = ZX.KH
知识点:
1. 使用with语句。
2. 使用case语句。
3. 使用left连接。
最近交易日期,消费,充值,卡交易计数器,注销。
4. 卡交易计数器的计算
记录该卡当前最大的交易序号,包括充值、消费、缴费等
日终批处理时从交易流水帐中取最大号和本值做比较,如果大于本表中的值,用最大号替换本表的值,否则,不做处理
需注意的是,卡片中的卡交易计数器的存储范围是0~65535,当大于65535时卡片中的值会自动清零,重新开始计数,因此,如本表中的值和流水帐中的最小值的差额大于65000时,可认为卡片已重新计数,那么需用重新计数后的最大值替换本表的值
举例:本表的值为65534,流水帐中包含65535、1、2、3四条交易数据,65534 — 1 = 65531,因为65533 大于65000,我们认为卡片已经重新计数,为本表赋值重新计数后的最大值:3。
- 日终批处理中使用的sql
- 在SQL Server数据库中使用批处理的注意事项
- 转 在SQL Server数据库中使用批处理的注意事项
- java中SQL的批处理
- SQL Server中批处理的知识点
- SQL Server中批处理的知识点
- 日终批处理性能优化
- 使用sqlcmd在批处理脚本中执行SQL
- Windows系统中使用的批处理参数
- 批处理中使用系统路径的命令
- DBUtils 框架的中batch批处理使用
- BAT批处理中choice的使用示例
- sql server和sybase中通用的使用BCP倒出当前库中所有表的数据批处理脚本
- sql备份的批处理
- 批处理中使用vbs
- 20110418_批处理sql 语句的写法_oracle !!的使用
- 使用批处理执行sql 语句
- 使用BAT批处理执行sql
- 基于多框架的J2EE快速开发方法
- 使用javascript通过className来获取元素
- 闪联:DLNA之外的存在理由
- 搜索引擎中Spider的可扩展性设计
- 重载new 和 delete 操作符
- 日终批处理中使用的sql
- 用VB如何计算单条语句运行时间
- struts2中数据校验1
- GridView排序问题
- 盖茨留给职场青年的十句警言
- 如何开始学习JSP
- oracle复制表的sql语句
- POJ1789 Truck History
- 频繁发布的OOo3和注定跳票的NB65