[英]mysql select two tables with userid and compare timestamp and count it
您好,我想我在这里尝试一些复杂的事情。 也许您可以在这里帮助我。
我有两个表:收入和支出。
收入包含用户ID,金额,时间戳记(如日期时间)和其他内容。 它仅包含用户赚钱时的信息。 例:
id | user_id | amount | timestamp |
1 | 2 | 1050 | 31days ago |
2 | 1 | 20 | 10days ago |
3 | 1 | 10 | 9 days ago |
4 | 2 | 10000 | 9 days ago |
...
支出将用户ID,金额,时间戳记作为日期时间,并且如果用户高于x收入,则具有关于支出的条目,比如说1000。
id | user_id | payout_amount | timestamp |
1 | 2 | 1050 | 30days ago |
...
现在我的问题。 我想计算有多少笔付款未完成(谁没有付款条目)。 这意味着。 我需要将payouts.timestamp与具有相同用户ID的gains.timestamp进行比较,然后检查是否有较新的条目,然后再进行付款。 如果是,则计算它的数量(因此,我认为这里需要先将收入相加)。 我什至不确定这是否可行。
如果不能单独使用mysql,我也可以使用php。
例如,结果应为:count = 2,因为用户ID 1只有30个收入,因此他没有达到1000,而且他在支出表中也没有条目。 用户ID 2有10000,但他仍然没有付款,因为我们没有执行它,也没有在付款表中进行输入。 他只有一个旧的支出,而新的收入却没有支付。
编辑:10天前的事情只是示例。 我在那里使用实际的日期时间类型EDIT2:忘了说我尝试了这个:
select COUNT(e.amount) FROM earnings e, payouts p where p.payout_timestamp < e.timestamp AND p.user_id = e.user_id GROUP BY p.user_id, e.user_id
然后去:
| Count(e.amount) |
| 2 |
| 1 |
我认为比较时间戳并不是获得所需结果的唯一方法。 如果这些表格正确地代表了收入和付款的历史记录,那么您可以将每个用户的总收入和付款进行汇总,然后对每个用户的user_id
少于收入的user_id
进行比较。 例如:
SELECT user_id, SUM(amount) as amount FROM earnings GROUP BY user_id;
总结每个用户的收入,
SELECT user_id, SUM(payout_amount) as amount FROM payouts GROUP BY user_id;
汇总每个用户的付款。
现在,让他们加入其中并计算付款少于收入的用户:
SELECT COUNT(e1.user_id) FROM (SELECT user_id, SUM(amount) as amount FROM earnings GROUP BY user_id) as e1 LEFT JOIN (SELECT user_id, SUM(payout_amount) as amount FROM payouts GROUP BY user_id) as p1 ON e1.amount > p1.amount;
对于您的表示例,我的结果是:
+-------------------+
| COUNT(e1.user_id) |
+-------------------+
| 2 |
+-------------------+
要查找未付款的用户,只需使用不带COUNT()函数的相同查询即可:
+---------+
| user_id |
+---------+
| 2 |
| 1 |
+---------+
在我看来,这种方式更为稳定,因为最近付款的金额可能少于付款时用户的总收入,例如:
1)用户获得1000
2)然后用户获得2000
3)并向该用户支付1000
在这种情况下,比较时间戳记而不比较付款金额将向您显示该用户没有付款要完成,而您仍然需要向他支付2000。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.