2017-02-10 84 views
0

你好,我想我在这里尝试一些复杂的东西。也许你可以在这里帮助我。mysql用userid选择两个表并比较时间戳并计算它

我有两个表:收入和支出。

收益具有作为日期时间和其他东西的用户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 | 
... 

赔率,如果用户是X的收益上面有用户ID,数量,时间戳日期时间,拥有大约支出条目可以说,1000例

id | user_id | payout_amount | timestamp | 
1 | 2  | 1050   | 30days ago | 
... 

我的问题了。我想计算有多少支出没有完成(谁没有支付)。意即。我需要比较payouts.timestamp和具有相同用户标识的earnings.timestamp,并检查是否有新条目,然后是支出。如果是的话,那么算一下它有多少(所以我认为在这里它需要首先总结收益)。我甚至不确定这是否可能。

我也可以用PHP做到这一点,如果这不是可以单独与MySQL。

例如,结果应该是:count = 2,因为userid 1只有30个收入,所以他没有达到1000,他也没有在支出表中输入。 Userid 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    | 

回答

1

我认为比较时间戳没有得到结果是你的唯一途径需要。如果这些表格正确地反映了收入和付款的历史记录,那么您可以将每位用户的总收入和付款总结在一起,然后比较每个用户付费少于收入的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 | 
+---------+ 

在我看来,这种方式更多的是sta竹叶提取,因为它可能有近期付款与付款的那一刻超过总用户的收入金额较少,如:

1)用户获得了1000

2),那么用户获得2000

3)之后,该用户被纳了1000

在这种情况下比较时间戳没有比较款项量会告诉你,这个用户没有支付做,而你仍然需要支付他2000