SQL(MySQL)查询以提取多个时间范围内的聚合
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了SQL(MySQL)查询以提取多个时间范围内的聚合,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2840字,纯文字阅读大概需要5分钟。
内容图文
![SQL(MySQL)查询以提取多个时间范围内的聚合](/upload/InfoBanner/zyjiaocheng/882/99164bdd79a646da86b83fdbda1b34d8.jpg)
假设我有下表my_table:
+----------+------------+------------+
+ key_code + cost_value + cost_date +
+----------+------------+------------+
+ AAAA + 1.01 + 2015-01-05 +
+ AAAA + 4.04 + 2015-01-10 +
+ AAAA + 3.03 + 2015-01-15 +
+ AAAA + 2.02 + 2015-01-20 +
+ BBBB + 5.05 + 2015-01-05 +
+ BBBB + 8.08 + 2015-01-10 +
+ BBBB + 7.07 + 2015-01-15 +
+ BBBB + 6.06 + 2015-01-20 +
+----------+------------+------------+
我可以使用以下查询为每个key_code提取最小和最大cost_values:
SELECT key_code, MIN(cost_value) AS cost_min, MAX(cost_value) AS cost_max
FROM my_table
GROUP BY key_code
ORDER BY key_code;
+----------+----------+----------+
+ key_code + cost_min + cost_max +
+----------+----------+----------+
+ AAAA + 1.01 + 4.04 +
+ BBBB + 5.05 + 8.08 +
+----------+----------+----------+
我可以使用以下查询将最近7天(假设今天= 2015-01-21)的最小值/最大值限制为cost_values:
SELECT key_code, MIN(cost_value) AS cost_min_07, MAX(cost_value) AS cost_max_07
FROM my_table
WHERE cost_date >= (CURDATE() - INTERVAL 7 DAY)
GROUP BY key_code
ORDER BY key_code;
+----------+-------------+-------------+
+ key_code + cost_min_07 + cost_max_07 +
+----------+-------------+-------------+
+ AAAA + 2.02 + 3.03 +
+ BBBB + 6.06 + 7.07 +
+----------+-------------+-------------+
但是,如果我想同时提取前7天,14天和21天的最小值/最大值怎么办?我如何(最有效地)产生以下结果?我猜我在问如何对每个MIN()和MAX()对应用不同的WHERE?
+----------+-------------+-------------+-------------+-------------+-------------+-------------+
+ key_code + cost_min_07 + cost_max_07 + cost_min_14 + cost_max_14 + cost_min_21 + cost_max_21 +
+----------+-------------+-------------+-------------+-------------+-------------+-------------+
+ AAAA + 2.02 + 3.03 + 2.02 + 4.04 + 1.01 + 4.04 +
+ BBBB + 6.06 + 7.07 + 6.06 + 8.08 + 5.05 + 8.08 +
+----------+-------------+-------------+-------------+-------------+-------------+-------------+
解决方法:
使用条件聚合:
SELECT key_code,
MIN(CASE WHEN cost_date >= CURDATE() - INTERVAL 7 DAY THEN cost_value END) AS cost_min_07,
MAX(CASE WHEN cost_date >= CURDATE() - INTERVAL 7 DAY THEN cost_value END) AS cost_max_07,
MIN(CASE WHEN cost_date >= CURDATE() - INTERVAL 14 DAY THEN cost_value END) AS cost_min_14,
MAX(CASE WHEN cost_date >= CURDATE() - INTERVAL 14 DAY THEN cost_value END) AS cost_max_14,
MIN(CASE WHEN cost_date >= CURDATE() - INTERVAL 21 DAY THEN cost_value END) AS cost_min_21,
MAX(CASE WHEN cost_date >= CURDATE() - INTERVAL 21 DAY THEN cost_value END) AS cost_max_21
FROM my_table
WHERE cost_date >= (CURDATE() - INTERVAL 21 DAY)
GROUP BY key_code
ORDER BY key_code;
内容总结
以上是互联网集市为您收集整理的SQL(MySQL)查询以提取多个时间范围内的聚合全部内容,希望文章能够帮你解决SQL(MySQL)查询以提取多个时间范围内的聚合所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。