优化结算区间费用查询 SQL 条件
- 将时间比较逻辑从 BETWEEN改为 >= 和 <= 操作符 - 使用 DATE() 函数提取日期进行比较,确保时间比较的准确性 - 简化跨区间租赁条件,提高 SQL 可读性
This commit is contained in:
parent
9662ab772d
commit
a6c49841f1
|
|
@ -1197,33 +1197,32 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
<!-- 已结算协议:租赁期间与查询区间有交集 -->
|
<!-- 已结算协议:租赁期间与查询区间有交集 -->
|
||||||
(bai.is_slt = 1 AND (
|
(bai.is_slt = 1 AND (
|
||||||
<!-- 情况1:领料时间在查询区间内 -->
|
<!-- 情况1:领料时间在查询区间内 -->
|
||||||
(sai.start_time IS NOT NULL AND sai.start_time BETWEEN #{startDate} AND #{endDate})
|
(sai.start_time IS NOT NULL AND DATE(sai.start_time) >= #{startDate} AND DATE(sai.start_time) <= #{endDate})
|
||||||
OR
|
OR
|
||||||
<!-- 情况2:退料时间在查询区间内 -->
|
<!-- 情况2:退料时间在查询区间内 -->
|
||||||
(sai.end_time IS NOT NULL AND sai.end_time BETWEEN #{startDate} AND #{endDate})
|
(sai.end_time IS NOT NULL AND DATE(sai.end_time) >= #{startDate} AND DATE(sai.end_time) <= #{endDate})
|
||||||
OR
|
OR
|
||||||
<!-- 情况3:结算时间在查询区间内 -->
|
<!-- 情况3:结算时间在查询区间内 -->
|
||||||
(sai.slt_time IS NOT NULL AND sai.slt_time BETWEEN #{startDate} AND #{endDate})
|
(sai.slt_time IS NOT NULL AND DATE(sai.slt_time) >= #{startDate} AND DATE(sai.slt_time) <= #{endDate})
|
||||||
OR
|
OR
|
||||||
<!-- 情况4:跨区间租赁(领料在区间前,退料/结算在区间后) -->
|
<!-- 情况4:跨区间租赁(领料在区间前,退料/结算在区间后) -->
|
||||||
(sai.start_time IS NOT NULL AND sai.start_time < #{startDate} AND
|
(sai.start_time IS NOT NULL AND DATE(sai.start_time) < #{startDate} AND
|
||||||
((sai.end_time IS NOT NULL AND sai.end_time > #{endDate}) OR
|
((sai.end_time IS NOT NULL AND DATE(sai.end_time) > #{endDate}) OR (sai.slt_time IS NOT NULL AND DATE(sai.slt_time) > #{endDate})))
|
||||||
(sai.slt_time IS NOT NULL AND sai.slt_time > #{endDate})))
|
|
||||||
))
|
))
|
||||||
OR
|
OR
|
||||||
<!-- 未结算协议:租赁期间与查询区间有交集 -->
|
<!-- 未结算协议:租赁期间与查询区间有交集 -->
|
||||||
((bai.is_slt = 0 OR bai.is_slt IS NULL) AND (
|
((bai.is_slt = 0 OR bai.is_slt IS NULL) AND (
|
||||||
<!-- 情况1:领料时间在查询区间内 -->
|
<!-- 情况1:领料时间在查询区间内 -->
|
||||||
(sai.start_time IS NOT NULL AND sai.start_time BETWEEN #{startDate} AND #{endDate})
|
(sai.start_time IS NOT NULL AND DATE(sai.start_time) >= #{startDate} AND DATE(sai.start_time) <= #{endDate})
|
||||||
OR
|
OR
|
||||||
<!-- 情况2:退料时间在查询区间内 -->
|
<!-- 情况2:退料时间在查询区间内 -->
|
||||||
(sai.end_time IS NOT NULL AND sai.end_time BETWEEN #{startDate} AND #{endDate})
|
(sai.end_time IS NOT NULL AND DATE(sai.end_time) >= #{startDate} AND DATE(sai.end_time) <= #{endDate})
|
||||||
OR
|
OR
|
||||||
<!-- 情况3:跨区间租赁(领料在区间前,退料在区间后或未退料) -->
|
<!-- 情况3:跨区间租赁(领料在区间前,退料在区间后或未退料) -->
|
||||||
(sai.start_time IS NOT NULL AND sai.start_time < #{startDate} AND (sai.end_time IS NULL OR sai.end_time > #{endDate}))
|
(sai.start_time IS NOT NULL AND DATE(sai.start_time) < #{startDate} AND (sai.end_time IS NULL OR DATE(sai.end_time) > #{endDate}))
|
||||||
OR
|
OR
|
||||||
<!-- 情况4:设备状态为在用(未退料)且领料时间不晚于查询结束时间 -->
|
<!-- 情况4:设备状态为在用(未退料)且领料时间不晚于查询结束时间 -->
|
||||||
(sai.status = '0' AND sai.start_time IS NOT NULL AND sai.start_time <= #{endDate})
|
(sai.status = '0' AND sai.start_time IS NOT NULL AND DATE(sai.start_time) <= #{endDate})
|
||||||
))
|
))
|
||||||
)
|
)
|
||||||
</where>
|
</where>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue