mysql - 如何根据多个条件选择列?
问题描述
我有一个包含多个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 查询吗?
解决方案
你可以用 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
推荐阅读
- javascript - 在 VSCode 中,JSHint 警告缺少分号
- javascript - 如何将键值对转换为新的键值对javascript
- android-studio - 关于 Gradle 和许可证的 Android Studio 错误
- action - 如何将操作发送到 redux-devtools 存储以从组件导入状态?
- zabbix - Zabbix 发件人。发现规则。主机原型
- javascript - 如何从html中删除不需要的文本
- java - 标题与 IText PDF 中的主要内容重叠
- android - 如何从文件的 URI 中获取 base64?
- c# - 如何编写 HTTPClient 请求以从 WPF 应用程序访问 ASP.Net Core Web App 方法?
- python - 在 SCRAPY 中形成 XPATH 选择器