Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 获取最后记录的百分比差异_Mysql_Sql - Fatal编程技术网

Mysql 获取最后记录的百分比差异

Mysql 获取最后记录的百分比差异,mysql,sql,Mysql,Sql,我有下一张桌子: +----+-----------+------------+-----------+ | ID | market_id | last_value | timestamp | +----+-----------+------------+-----------+ | 1 | 1 | 10 | 1001 | | 2 | 1 | 15 | 1002 | | 3 | 1 |

我有下一张桌子:

+----+-----------+------------+-----------+
| ID | market_id | last_value | timestamp |
+----+-----------+------------+-----------+
| 1  |    1      |     10     |   1001    |
| 2  |    1      |     15     |   1002    |
| 3  |    1      |     25     |   1003    |
| 4  |    1      |     30     |   1004    |
| 5  |    1      |     05     |   1005    |
+----+-----------+------------+-----------+
我的想法与此类似:

SELECT id, market_id, last_value, timestamp from data_markets
where from_unixtime(timestamp, '%d-%m-%Y %H:%m:%s') >= DATE_FORMAT(NOW(),'%d-%m-%Y 00:00:00') and market_id = 1
有了这个,我得到了今天的所有行,但我知道使用join可以得到:

+---+----------------------+--------------------+----------+
| market_id |    change    |    total_change    |  is_down |
+-----------+--------------+--------------------+----------+
|     1     |     83.3%    |      -50.00%       |   true   |
+-----------+--------------+--------------------+----------+
说明:

  • 更改:此值与最后一行的差值

  • 总更改:该值是“24小时”中所有行的差异

  • 是向下的:它可能知道该值相对于总更改是增加还是减少

编辑:


我编辑了这个示例,总的来说,我喜欢所有行的差异,但这不可能是第一行的差异。

我认为这是一个查询,它提供了您想要的大部分内容

SELECT
    dm.id,
    dm.market_id,
    dm.last_value,
    (@prev_value := (SELECT last_value FROM data_markets WHERE (id < dm.id AND market_id = dm.market_id) ORDER BY id DESC LIMIT 1)) AS prev_value,
    ROUND((@24hr_value := (SELECT AVG(last_value) FROM data_markets WHERE (timestamp >= (dm.timestamp - 86400) AND timestamp < dm.timestamp AND market_id = dm.market_id))),1) AS 24hr_value,
    ROUND(IF(@prev_value,(((dm.last_value - @prev_value) / @prev_value) * 100),0),1) AS percent_change,
    ROUND((@24hr_change := IF(@24hr_value,(((dm.last_value - @24hr_value) / @24hr_value) * 100),0)),1) AS 24hr_change,
    IF(@24hr_change < 0, 'down', IF(@24hr_change > 0, 'up', '-')) AS direction
FROM
    data_markets dm,
    (SELECT
        @prev_value:=0,
        @24hr_value:=0,
        @24hr_change:=0
    ) r
WHERE
    dm.market_id = 1
ORDER BY
    dm.id ASC
以及最终结果集:

===============================================================================
|id | market_id | last_value | prev | 24hr | change | 24hr_change | direction |
===============================================================================
| 1 | 1         | 10         | NULL | NULL | 0.0    | 0.0         | -         |
| 2 | 1         | 15         | 10   | NULL | 50.0   | 0.0         | -         |
| 3 | 1         | 25         | 15   | NULL | 66.7   |  0.0        | -         |
| 4 | 1         | 30         | 25   | 25.0 | 20.0   | 20.0        | up        |
| 5 | 1         | 5          | 30   | 27.5 | -83.3  | -83.6       | down      |
===============================================================================

你所说的过去24小时的总变化是什么意思?如果在过去的24小时内同时有一个大得多的值和一个小得多的值呢?这将创建两个完全不同的总更改值。还是你指的是24小时平均值?@Jay:我想他想把一行和其他行进行比较,然后打印出变化百分比(%)的变化。如果最后一个值是10,倒数第二个值是20,那么变化是100%(我认为)。总变化是1整天的这个百分比。
===============================================================================
|id | market_id | last_value | prev | 24hr | change | 24hr_change | direction |
===============================================================================
| 1 | 1         | 10         | NULL | NULL | 0.0    | 0.0         | -         |
| 2 | 1         | 15         | 10   | NULL | 50.0   | 0.0         | -         |
| 3 | 1         | 25         | 15   | NULL | 66.7   |  0.0        | -         |
| 4 | 1         | 30         | 25   | 25.0 | 20.0   | 20.0        | up        |
| 5 | 1         | 5          | 30   | 27.5 | -83.3  | -83.6       | down      |
===============================================================================