如何解决MySQL:如何对具有多个条件的联接查询子查询求和?
我有两个表:
表Y:指示在什么时间段内货币有效
+-----------+---------+------+
| starttime | endtime | name |
+-----------+---------+------+
| 1 | 2 | Mark |
| 3.4 | 3.6 | Fred |
| 2 | 2.2 | Fred |
+-----------+---------+------+
表Z
+-----------+---------+------+-------+
| starttime | endtime | name | money |
+-----------+---------+------+-------+
| 1.5 | 1.7 | Mark | 0.1 |
| 1.4 | 3.5 | Fred | 0.2 |
| 0.9 | 1.0 | Fred | 0.3 |
| 1.2 | 2.5 | Fred | 0.5 |
+-----------+---------+------+-------+
我想要什么:
+------+---------------+
| name | sum_validmoney|
+------+---------------+
| Mark | 0.1 |
| Fred | 0.7 | **=> this is 0.2+0.5 (because those rows overlapped in start/endtime segments)**
+------+---------------+
我希望根据表Y中指示的时间段约束(有界)对表Z中的行进行汇总。 也就是说,要在表Z中求和的行必须具有在表Y中找到的时间段内的时间段 (表Z上还提供了其他查询的其他过滤器;但我认为此处不相关)
我是MySQL的新手。我已经尝试过子查询,但是认为我缺少一些关键;我不确定如果没有一些复杂的循环结构是否可以做到这一点,而mysql似乎并没有很好的装备。
解决方法
您似乎想过滤表z
的行,这些行的范围重叠的范围至少是表y
中的一个范围。
如果是这样,一种方法是:
select name,sum(money) sum_valid_money
from z
where exists (
select 1
from y
where y.name = x.name and y.starttime <= x.endtime and y.endtime >= x.starttime
)
group by name
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。