SQL优化

yuani 发布于 2018/01/15 16:52
阅读 375
收藏 0

id    code    pulse       time 
1      001       85          1503353206000
2      001       85          1503353211000
3      002       75          1503353216000
4      002       95          1503353221000
5      003       79          1503353227000
6      003       74          1503353232000

查询出每个code的pulse最大值和最小值,还有最后一条pulse值(时间戳最大)

优化sql

SELECT 
a.Code,
a.maximum,
a.minimum,
b.pulse AS current

from (
SELECT
Code,
    IFNULL(MAX(pulse), 0) AS maximum,
    IFNULL(MIN(pulse), 0) AS minimum
FROM
    table super
WHERE 1=1
GROUP BY Code
) a LEFT JOIN (

select b.Code,b.time,a.pulse from (
SELECT Code, pulse, time FROM table
) a right JOIN (
select MAX(time) time, Code from table GROUP BY Code
) b on a.Code = b.Code and a.time = b.time

)b on a.Code = b.Code

加载中
0
Tuesday
Tuesday

还不如三条sql呢... 

0
文文木
文文木

select code,max(pulse),min(pulse),last_time from (select code,pulse,time,first_value(time) OVER (PARTITION BY code ORDER BY time desc) last_time from table) t;

仅供参考

蔚蓝SG
蔚蓝SG
回复 @jetliu1987 :回复错了把,我又不是作者
y
yuani
回复 @魔力猫 : 手残了
魔力猫
魔力猫
回复 @yuani : 那标签干嘛写个Oracle
y
yuani
mysql 数据库.
文文木
文文木
回复 @蔚蓝SG : 你丫的都不说是什么数据库?
下一页
返回顶部
顶部