通过不正确返回字段的整数

时间:2016-02-01 15:58:28

标签: mysql laravel eloquent

我正在尝试使用口才,我在产生预期结果方面遇到了问题。 说实话,我会告诉你我拥有什么,我想要什么以及我做了什么。但是,也许还有另一种方法可以做我想做的事情,我也很乐意对它进行测试。 :)

我有什么: 我有一张桌子,就是:

+----+------------+--------------+---------------+---------------------+---------------------+
| id | machine_id | balance_left | balance_found | created_at          | updated_at          |
+----+------------+--------------+---------------+---------------------+---------------------+
|  1 |          1 |        12.30 |         12.30 | 2016-01-26 16:39:18 | 2016-01-28 16:39:18 |
|  2 |          2 |        45.60 |         45.60 | 2016-01-26 16:39:18 | 2016-01-28 16:39:18 |
|  3 |          3 |        78.90 |         78.90 | 2016-01-26 16:40:22 | 2016-01-28 16:40:22 |
|  4 |          4 |        90.12 |         90.12 | 2016-01-26 16:40:22 | 2016-01-28 16:40:22 |
|  5 |          1 |         5.60 |          3.40 | 2016-01-28 17:30:33 | 2016-01-28 17:30:33 |
|  6 |          2 |         7.89 |          4.56 | 2016-01-28 17:30:33 | 2016-01-28 17:30:33 |
+----+------------+--------------+---------------+---------------------+---------------------+

我需要什么: 给定一个日期,我确实需要获得最新的结果,并且需要使用'balance_left'。 但是,将machine_id作为唯一条目。 例如,如果我在23:59通过日期26/01,我希望收到ID为1,2,3和4的行。并且,SUM将为12.30 + 45.60 + 78.90 + 90.12 = 226.92。 现在,如果我在23:59通过日期28/01,我希望收到ID为3,4,5和6的行。一旦条目5和6是machine_id 1和2的最新条目。在这种情况下,总和将是:78.90 +90.12 + 5.60 + 7.89 = 182.51

我做了什么:

$sub = App\Transaction::orderBy('created_at','DESC');
$transcations = DB::table(DB::raw("({$sub->toSql()}) as sub"))->where('created_at','<=', '2016-01-28 23:59:59')->groupBy('machine_id')->sum('balance_left');

没有SUM,但是使用了select('balance_left'),我得到了正确的行:

=> [
     {#672
       +"balance_left": 5.6,
     },
     {#671
       +"balance_left": 7.89,
     },
     {#643
       +"balance_left": 78.9,
     },
     {#677
       +"balance_left": 90.12,
     },
   ]

问题在于,当我要求总和时,我得到了:

=> 17.9

过了一会儿,我发现实际上,他正在做一个machine_id条目的总和,所以ID为1和5的行有machine_id 1,然后这个总和是12.30 +5.60 = 17.90的总和

问题: 我怎样才能真正SUM返回的行?或者,还有其他更好的方式来回报我期待的东西吗?

非常感谢!

0 个答案:

没有答案