计算MySQL中两行金额之差

计算MySQL中两行金额之差,mysql,Mysql,我有一个计算余额的表,表中有以下列: > describe tbl_credit_log +------------------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------------+------------------+--

我有一个计算
余额的表,表中有以下列:

> describe tbl_credit_log

+------------------+------------------+------+-----+---------+----------------+
| Field            | Type             | Null | Key | Default | Extra          |
+------------------+------------------+------+-----+---------+----------------+
| id               | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| visitor_id       | int(10) unsigned | YES  | MUL | NULL    |                |
| post_owner_id    | int(10) unsigned | YES  | MUL | NULL    |                |
| post_id          | int(10) unsigned | YES  | MUL | NULL    |                |
| balance          | double(50,6)     | YES  |     | NULL    |                |
| credits          | double(50,6)     | YES  |     | NULL    |                |
| debits           | double(50,6)     | YES  |     | NULL    |                |
| trans_id         | varchar(255)     | NO   |     | NULL    |                |
| trans_amount     | double(50,6)     | YES  |     | NULL    |                |
| earningtype      | varchar(15)      | NO   |     | NULL    |                |
| created_at       | timestamp        | YES  |     | NULL    |                |
| updated_at       | timestamp        | YES  |     | NULL    |                |
+------------------+------------------+------+-----+---------+----------------+
这里是我想进行计算的几个条目:

+---------+------------+---------------+---------+------------------+-------------+-----------+--------+---------------------+
| id      | visitor_id | post_owner_id | post_id | advertisement_id | balance     | credits   | debits | created_at          |
+---------+------------+---------------+---------+------------------+-------------+-----------+--------+---------------------+
| 4331666 |      11006 |            11 |    NULL |             NULL | 3639.624400 | 22.500000 |   NULL | 2018-08-10 05:45:37 |
| 4364034 |       7206 |            11 |    NULL |             NULL | 5139.607900 | 22.500000 |   NULL | 2018-08-10 11:02:52 |
| 4377238 |       4353 |            11 |    NULL |             NULL | 5162.107900 | 22.500000 |   NULL | 2018-08-10 12:52:01 |
| 4485288 |       9664 |            11 |    NULL |             NULL | 5184.607900 | 22.500000 |   NULL | 2018-08-11 08:58:19 |
| 4544185 |      11709 |            11 |    NULL |             NULL | 5207.107900 | 22.500000 |   NULL | 2018-08-11 19:06:52 |
| 4550728 |      11970 |            11 |    NULL |             NULL | 5229.607900 | 22.500000 |   NULL | 2018-08-11 20:39:36 |
| 4607317 |      12021 |            11 |    NULL |             NULL | 5252.107900 | 22.500000 |   NULL | 2018-08-12 07:29:17 |
| 4629660 |      11926 |            11 |    NULL |             NULL | 5274.607900 | 22.500000 |   NULL | 2018-08-12 09:18:56 |
| 4725299 |      12088 |            11 |    NULL |             NULL | 5297.107900 | 22.500000 |   NULL | 2018-08-13 01:54:53 |
| 4725347 |      10253 |            11 |    NULL |             NULL | 5319.607900 | 22.500000 |   NULL | 2018-08-13 08:29:46 |
| 4725357 |      12140 |            11 |    NULL |             NULL | 5342.107900 | 22.500000 |   NULL | 2018-08-13 09:27:44 |
+---------+------------+---------------+---------+------------------+-------------+-----------+--------+---------------------+
这里
我们在id号上有差异(超过50),我想在整个数据库中找到,其中用户id将作为外键
发布所有者id

我想获得所有在金额上有差异的
post\u所有者id
,以及在
创建的

所以预期的结果是这样的

+---------+------------+---------------+---------+------------------+-------------+-----------+--------+---------------------+
    | id      | visitor_id | post_owner_id | post_id | advertisement_id | balance     | credits   | debits | created_at          |
    +---------+------------+---------------+---------+------------------+-------------+-----------+--------+---------------------+
    | 4364034 |       7206 |            11 |    NULL |             NULL | 5139.607900 | 22.500000 |   NULL | 2018-08-10 11:02:52 |
    +---------+------------+---------------+---------+------------------+-------------+-----------+--------+---------------------+
这里我们将有多个
post\u owner\u id
。我正在显示一个
post\u owner\u id
,因为这个结果只包含一个post owner id。但是我想得到不同的post owner id,它们之间的差额
大于50。


我不知道该怎么做。我想比较
group\u by
post\u owner\u id上的价格,并获得差异金额所在的行。

考虑以下因素:

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(id SERIAL PRIMARY KEY
,balance DECIMAL(12,6) NOT NULL
,created_at timestamp NOT NULL 
);

INSERT INTO my_table VALUES
(4331666,3639.624400,'2018-08-10 05:45:37'),
(4364034,5139.607900,'2018-08-10 11:02:52'),
(4377238,5162.107900,'2018-08-10 12:52:01'),
(4485288,5184.607900,'2018-08-11 08:58:19'),
(4544185,5207.107900,'2018-08-11 19:06:52'),
(4550728,5229.607900,'2018-08-11 20:39:36'),
(4607317,5252.107900,'2018-08-12 07:29:17'),
(4629660,5274.607900,'2018-08-12 09:18:56'),
(4725299,5297.107900,'2018-08-13 01:54:53'),
(4725347,5319.607900,'2018-08-13 08:29:46'),
(4725357,5342.107900,'2018-08-13 09:27:44');
备选案文1:

SELECT a.* 
  FROM 
     ( SELECT x.*
            , MIN(y.id) y_id 
         FROM my_table x 
         JOIN my_table y 
           ON y.created_at > x.created_at 
        GROUP 
           BY x.id
     ) a 
  JOIN my_table b 
    ON b.id = a.y_id 
   AND b.balance > a.balance + 50;
+---------+-------------+---------------------+---------+
| id      | balance     | created_at          | y_id    |
+---------+-------------+---------------------+---------+
| 4331666 | 3639.624400 | 2018-08-10 05:45:37 | 4364034 |
+---------+-------------+---------------------+---------+
备选案文2:

SELECT id
     , balance
     , created_at
  FROM 
     ( SELECT x.*
            , @i<balance-50 i
            , @i:=balance
         FROM my_table x
            , (SELECT @i:=null) vars
        ORDER
           BY created_at
     ) n
 WHERE i = 1;

 +---------+-------------+---------------------+
 | id      | balance     | created_at          |
 +---------+-------------+---------------------+
 | 4364034 | 5139.607900 | 2018-08-10 11:02:52 |
 +---------+-------------+---------------------+
选择id
,结余
,于
从…起
(选择x*

,@i'amount'?什么是'amount'?无论如何,答案是11,因为这是唯一的post_owner\u idno amount=
余额
@Strawberry所以,你在寻找连续余额之间的差值大于50的行?是的@Strawberry你说得对。我想我的解释比你的解释要简单一点!谢谢@我尝试了这个查询。但是似乎没有地方可以放置我试图放入选项2中的
post\u owner\u id
。但是它产生了该用户的所有值。在选项1中,您只需将其添加到子查询和加入条件中。在选项2中,您必须将其添加到order by子句中,并调整@I