分区统计金额sql

WITH a AS (
SELECT 'A' ty , 7 stime ,10 etime, 10 price FROM dual
UNION ALL
SELECT 'A' ty , 10 stime ,12 etime, 25 price FROM dual
UNION ALL
SELECT 'A' ty , 12 stime ,18 etime, 15 price FROM dual
UNION ALL
SELECT 'A' ty , 18 stime ,24 etime, 20 price FROM dual
UNION ALL
SELECT 'B' ty , 7 stime ,12 etime, 110 price FROM dual
UNION ALL
SELECT 'B' ty , 12 stime ,18 etime, 115 price FROM dual
UNION ALL
SELECT 'B' ty , 18 stime ,24 etime, 120 price FROM dual
)

SELECT CASE  WHEN b.betime-a.stime > 0 THEN betime WHEN b.betime-a.stime <0 THEN a.stime END stime,CASE  WHEN b.estime-a.etime < 0 THEN b.estime WHEN b.estime-a.etime >0 THEN a.etime END etime,a.price, LEAST(a.etime,b.estime) -greatest(a.stime,b.betime) hours,(LEAST(a.etime,b.estime) -greatest(a.stime,b.betime))*price, b.betime,b.estime FROM  a a,
(SELECT c.stime,8 betime,19 estime ,d.etime  FROM  (SELECT max(a.stime) stime  FROM a  a WHERE a.ty='A' AND stime < 8 ) c , (SELECT MIN(a.etime) etime   FROM a  a WHERE a.ty='A' AND 19 < etime ) d) b
WHERE a.stime >= b.stime AND a.etime <= b.etime AND a.ty='A'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值