sql >> データベース >  >> RDS >> Mysql

SQL行2から結果行1を減算する方法、行3から行2を減算する方法

    MySQLのユーザー定義変数> 、そしてあなたはおそらくこのようなことをしたいと思うでしょう:

    SET @prev := NULL;
    SELECT
        DATE(created_at),
        price - COALESCE(@prev, price) AS price_change,
        name,
        (@prev := price) AS price FROM (
            SELECT * FROM items ORDER BY DATE(created_at)
        ) t1
    GROUP BY
        name, price, DATE(created_at)
    HAVING name = 'Ibuprofen'
    ORDER BY DATE(created_at);
    Query OK, 0 rows affected (0.00 sec)
    

    構文をチェックしていないので少しずれているかもしれませんが、それが一般的な考え方です。注文できるように日付を追加しました。そうしないと、結果が意味をなさない場合があります。

    編集:

    これを私のマシンで実行しただけです:

    SET @prev := NULL;
    SELECT
        DATE(created_at),
        price - COALESCE(@prev, price) AS price_change,
        name,
        (@prev := price) AS price FROM (
            SELECT * FROM items ORDER BY DATE(created_at)
        ) t1
    GROUP BY
        name, price, DATE(created_at)
    HAVING name = 'Ibuprofen'
    ORDER BY DATE(created_at);
    
    Query OK, 0 rows affected (0.00 sec)
    
    +------------------+--------------+-----------+-------+
    | DATE(created_at) | price_change | name      | price |
    +------------------+--------------+-----------+-------+
    | 2018-12-10       |            0 | Ibuprofen |   110 |
    | 2018-12-13       |          -10 | Ibuprofen |   100 |
    | 2018-12-13       |           20 | Ibuprofen |   120 |
    +------------------+--------------+-----------+-------+
    
    3 rows in set, 1 warning (0.00 sec)
    
    SELECT * FROM items;
    +----+-------+----------------+---------------------+
    | id | price | name           | created_at          |
    +----+-------+----------------+---------------------+
    |  8 |   100 | Ibuprofen      | 2018-12-13 12:52:35 |
    |  9 |   110 | Ibuprofen      | 2018-12-10 12:12:12 |
    | 10 |   120 | Ibuprofen      | 2018-12-13 12:52:35 |
    | 11 |  1000 | Something else | 2018-12-13 13:01:19 |
    +----+-------+----------------+---------------------+
    
    4 rows in set (0.00 sec)
    


    1. MySQLをVisualStudioC#に接続する

    2. MySQLの結果をbashで処理する

    3. 結合テーブルを使用したMySQLGreatestNの結果

    4. Android用SQLCipherを使い始める方法は?