先贴最后获得的标准sql:
SELECT
oott.*
FROM
(SELECT
CAST((ot.gb - ot.old_gb) * 1024 AS DECIMAL(12,2)) growth_mb,
ot.*
FROM
(SELECT
(SELECT
prv.gb
FROM
erp_table_capacity prv
WHERE 1 = 1
AND DATE(FROM_UNIXTIME(prv.dml_time)) = DATE_SUB(CURDATE(), INTERVAL 7 DAY)
AND prv.unionid = t.unionid
-- and prv.`table_name`='MLOG$_ENI_OLTP_ITEM_STAR'
) AS old_gb,
t.*
FROM
erp_table_capacity t
WHERE 1 = 1
-- and t.`table_name`='MLOG$_ENI_OLTP_ITEM_STAR'
AND DATE(FROM_UNIXTIME(t.dml_time)) = CURDATE()) ot) oott
WHERE 1=1
AND oott.growth_mb >= 100.0
ORDER BY oott.growth_mb DESC;
开始解答,学习并解决到的问题:
1. 实现类似 oracle的rownum的实现,表连接自己
2. 解决format将数字保留2位时会给数字加上千分位“,”的情况
---
对于问题1,直接参见贴出的sql,后续自己再不明白了再仔细研读。
问题2,先引用博客《https://blog.csdn.net/u011136197/article/details/78659340》言简意赅的说明:
format(param, 2) (不建议)
convert(param, decimal(12,2))(建议)
cast(param as decimal(12,2))(建议)
最后我用的是:cast(param as decimal(12,2)) 。早先用的是format ,有一组数字在执行查询的时候显示结果为:1,256.04 注意千分位有逗号,导致数据排序怎么都不对。后续改为了cast,结果正确。
坑,查之填之。