(MySQL)汇聚&;按时段对两个表求和

(MySQL)汇聚&;按时段对两个表求和,mysql,merge,Mysql,Merge,我有两张桌子 +----+------------+------------+ | id | pay_date | payment | +----+------------+------------+ | 1 | 2010-01-01 | 20000 | | 1 | 2010-01-02 | 30000 | | 1 | 2010-01-03 | 30000 | | 1 | 2010-01-06 | 40000 | | 2 | 2010

我有两张桌子

+----+------------+------------+
| id | pay_date   | payment    | 
+----+------------+------------+
|  1 | 2010-01-01 | 20000      |
|  1 | 2010-01-02 | 30000      |
|  1 | 2010-01-03 | 30000      |
|  1 | 2010-01-06 | 40000      |
|  2 | 2010-01-01 | 10000      |
|  2 | 2010-01-03 | 30000      |
|  2 | 2010-01-06 | 70000      |
+----+------------+------------+


+----+------------+------------+
| id | start_date | end_date   |
+----+------------+------------+
|  1 | 2010-01-01 | 2010-01-05 |
|  1 | 2010-01-06 | 2010-01-30 |
|  2 | 2010-01-01 | 2010-01-05 |
|  2 | 2010-01-06 | 2010-01-10 |
+----+------------+------------+
通过合并两个表,我想在下表中创建

+----+------------+------------+------------+
| id | start_date | end_date   | payment    |
+----+------------+------------+------------+
|  1 | 2010-01-01 | 2010-01-05 | 80000      |
|  1 | 2010-01-06 | 2010-01-30 | 40000      |
|  2 | 2010-01-01 | 2010-01-05 | 40000      |
|  2 | 2010-01-06 | 2010-01-10 | 70000      |
+----+------------+------------+------------+
此表为同一id在固定期限内的付款总额


如何制作此表?

对于您提供给我们的确切数据,我们可以将第二个表与第一个表合并,条件是付款日期介于第一个表中的开始日期和结束日期之间,并且
id
值匹配。但马上就有一个明显的边缘案例问题。如果付款日期恰好与第二个表中的开始日期和结束日期重叠,会发生什么情况?那么,我们不清楚应该将该付款分配到哪个范围。如果我们只是在之间使用
,我们最终将重复计算付款

因此,在我下面的查询中,我假设如果支付日期大于或等于开始日期,但严格小于结束日期,则会分配支付日期。这可能不是你想要的逻辑,但是如果你有重叠的数据,你可能会做出类似的假设

SELECT
    t2.id, t2.start_date, t2.end_date, SUM(t1.payment) AS payment
FROM table2 t2
LEFT JOIN table1 t1
    ON t1.id = t2.id AND
       t1.pay_date >= t2.start_date AND
       t1.pay_date < t2.end_date
GROUP BY
    t2.id, t2.start_date, t2.end_date
ORDER BY
    t2.id, t2.start_date;
选择
t2.id,t2.start_日期,t2.end_日期,金额(t1.付款)作为付款
来自表2 t2
左连接表1 t1
在t1.id=t2.id和
t1.付款日期>=t2.开始日期和
t1.付款日期
输出:

此处演示:


将另一个表中
开始日期
结束日期
之间具有
支付日期
列汇总

查询

select t1.`id`, t1.`start_date`, t1.`end_date`,
sum(t2.`payment`) as `payment`
from `table2` as t1
join `table1` as t2
on t1.`id` = t2.`id`
and t2.`pay_date` between t1.`start_date` and t1.`end_date`
group by t1.`id`, t1.`start_date`, t1.`end_date`;

很高兴帮助你。顺便问一下,你的屏幕名在韩语中是什么意思?谢谢。这是一个简洁的查询:)