首页 > 解决方案 > 如何根据多个条件选择列?

问题描述

我有一个包含多个price-timestamp元组的表:

#mytable;
id;<somecolumns>;price1;timestamp1;price2;timestamp2;

我想导出临时表中的每个价格时间戳元组,但只导出时间戳在特定时间间隔内的价格:

#mytemp
id;price1;price2;

我可以通过为每个元组重复 sql 来实现这一点:

INSERT INTO mytemp (price1)
SELECT price1 FROM mytable WHERE timestamp1 > NOW() - INTERVAL 3 HOUR;

INSERT INTO mytemp (price2)
SELECT price2 FROM mytable WHERE timestamp2 > NOW() - INTERVAL 3 HOUR;

#repeat for all price-timestamp tuples

问题:我可以将其优化为一个 sql 查询吗?

标签: mysqlsql

解决方案


你可以用 case when

  SELECT
   sum(case when timestamp1 > NOW() - INTERVAL 3 HOUR then price1 else 0 end) as price1,
    sum(case when timestamp2 > NOW() - INTERVAL 3 HOUR then price2 else 0 end)
    as price2
     FROM mytable  ;

但如果你想插入只需选择

INSERT INTO mytemp (price1,price2)
SELECT
   sum(case when timestamp1 > NOW() - INTERVAL 3 HOUR then price1 else 0 end) as price1,
    sum(case when timestamp2 > NOW() - INTERVAL 3 HOUR then price2 else 0 end)
    as price2
     FROM mytable

推荐阅读