sql 语句


结算记录

SELECT

DATE_FORMAT(union_member_apply_bill.`apply_time`,'%Y-%m-%d')AS requestTime, -- 格式化时间

union_member_account_record.`before`,

union_member_apply_bill.`amount`,

CONCAT(union_member_apply_bill.`check_status`,union_member_apply_bill.`status`)AS`status`,  --联合两个字段 实际上是byte[] , 比如 01, -1-1

union_member_apply_bill.`bill_amount`,

union_member_apply_bill.`drawback`,

CASE WHENISNULL(union_member_apply_bill.`bill_time`) THEN '--' ELSEDATE_FORMAT(union_member_apply_bill.`bill_time`,'%Y-%m-%d') END AS payTime,--当这个字段的值是空的时候 '--',不为空则按照这个时间格式输出

CASE WHENISNULL(union_member_taxes_back.taxesback_id) THEN '--' ELSEunion_member_taxes_back.`invoice_image` END AS `haveInvoice`,

CASE

WHEN union_member_apply_bill.`amount`>800 ANDISNULL(union_member_taxes_back.`taxesback_id`) --金额大于800 且字段不为空ANDISNULL(union_member_taxes_back.`invoice_image`) AND union_member_apply_bill.`check_status`!=-1 ANDTO_DAYS(NOW())-TO_DAYS(union_member_apply_bill.`apply_time`)<=90 THEN '申请'

WHEN union_member_apply_bill.`amount`>800 ANDunion_member_apply_bill.`taxes`>0 AND!ISNULL(union_member_taxes_back.`taxesback_id`) AND!ISNULL(union_member_taxes_back.`invoice_image`) ANDunion_member_apply_bill.`drawback`=0 AND ISNULL(union_member_taxes_back.`bill_time`)THEN '已申请'

WHEN union_member_apply_bill.`amount`>800 ANDunion_member_apply_bill.`taxes`>0 AND!ISNULL(union_member_taxes_back.`taxesback_id`) AND!ISNULL(union_member_taxes_back.`invoice_image`) ANDunion_member_apply_bill.`drawback`>0 AND!ISNULL(union_member_taxes_back.`bill_time`)THEN '已退税'

ELSE '--'

END AS `DrawbackCondition`,

union_member_apply_bill.`apply_id` AS applyId

FROM union_member_apply_bill

LEFT JOIN union_member_account_record ONunion_member_apply_bill.account_record=union_member_account_record.account_record_id 

 LEFT JOINunion_member_taxes_back ON union_member_apply_bill.apply_id = union_member_taxes_back.apply_id

 WHEREunion_member_apply_bill.user_id=1

 ORDER BYunion_member_apply_bill.`apply_time` DESC


Drawback

SELECT

union_member_taxes_back.`add_time`,union_member_apply_bill.`bill_notes`,union_member_apply_bill.`taxes`AS taxes ,union_member_taxes_back.`invoice_image` AS`invoiceInfo`,union_member_apply_bill.`drawback`,

CASE WHENISNULL(union_member_taxes_back.`bill_time`) THEN '--' ELSEDATE_FORMAT(union_member_taxes_back.`bill_time`,'%Y-%m-%d') END  AS `billTime`,

CONCAT(union_member_taxes_back.`check_status`,union_member_taxes_back.`status`)AS `status`,

union_member_taxes_back.`taxesback_id`

FROMunion_member_apply_bill,union_member_taxes_back

WHEREunion_member_apply_bill.`user_id`=1 AND union_member_taxes_back.apply_id = union_member_apply_bill.apply_id

ANDunion_member_apply_bill.`taxes`>0

AND!ISNULL(union_member_taxes_back.`invoice_image`)

ORDER BYunion_member_taxes_back.`add_time` DESC


oneDrawbakcDetail

SELECTunion_member_apply_bill.`user_id`,union_member_taxes_back.`taxesback_id`,

uc_user_login.`username`,union_member_account_record.`before`,union_member_apply_bill.`amount`,

union_member_taxes_back.`add_time`,union_member_apply_bill.`check_user`,union_member_apply_bill.`check_time`,

uc_user_login.`username`ASaccountant,union_member_apply_bill.`bill_amount`,union_member_apply_bill.`taxes`,

union_member_apply_bill.`bill_time`,

CASE WHENISNULL(union_member_taxes_back.taxesback_id) THEN '无' ELSE '有' END AS`haveInvoice`,

CASE WHENISNULL(union_member_taxes_back.`taxesback_id`) THEN '无' ELSE '有' END AS`haveDrawback`,

union_member_taxes_back.`check_status`,

union_member_taxes_back.`status`,

CONCAT(union_member_taxes_back.`check_status`,union_member_taxes_back.`status`)AS `status`

FROMunion_member_apply_bill

LEFT JOINunion_member_account_record ON union_member_apply_bill.account_record=union_member_account_record.account_record_id

LEFT JOINunion_member_taxes_back ON union_member_apply_bill.apply_id = union_member_taxes_back.apply_id

LEFT JOINuc_user_login ON union_member_apply_bill.`user_id`=uc_user_login.`user_id`

WHEREunion_member_apply_bill.user_id=1 AND union_member_taxes_back.`taxesback_id`=3


相对效率比较低的一条sql 语句:

SELECT site_id, slot_id, COUNT(*) FROM union_ad_creative 
                WHERE `status`!=0 AND slot_id NOT IN (SELECT DISTINCT(slot_id) FROM union_ad_creative WHERE `status`=0 ) 
                GROUP BY slot_id ORDER BY COUNT(*) ASC LIMIT 1
原本这是写在unit test中的sql语句, 目的是为了disable一条记录。  做完unit test后要将数据还原回去。

所以最好筛选那些 slot_id现在不是0的数据。 即

slot_id NOT IN (SELECT DISTINCT(slot_id) FROM union_ad_creative WHERE `status`=0 ) 
但是效果不好, 因为not in引种影响效率。

优化之后的sql语句,效率明显提升了很多。

SELECT a.site_id, a.slot_id, COUNT(*) FROM union_ad_creative a
                    LEFT JOIN(SELECT DISTINCT(slot_id) FROM union_ad_creative WHERE `status`=0) b
                    ON a.slot_id=b.slot_id
                    WHERE a.status!=0 AND b.slot_id IS NULL
                    GROUP BY a.slot_id ORDER BY COUNT(*) ASC LIMIT 1
left join了,  b.slot_id 就又可能为null了, 而我们就是要找这样的数据



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值