groupped MySQLのテーブルの最後の値の増加をどのように見つけますか?

witkacy26:

私はいくつかのコロナウイルスの統計をやっています。あなたは、クエリで私を助けてくださいます。私が最後に感染して取得したいのですが、それぞれの国の成長(フィールド「を確認しました」)。それは最後から二番目meassure各国の最後の1の間の差である必要がありますので、一部の国では、毎日更新されません。

要するに - どのようgrouppedテーブルの最後の値の増加を見つけるには?

テーブルには、次のようになります。

CREATE TABLE coronavirus ( id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, place VARCHAR(30), province VARCHAR(30), country VARCHAR(40), updated TIMESTAMP, confirmed INTEGER, deaths INTEGER, recovered INTEGER, latitude FLOAT, longitude FLOAT);

ありがとう!

PS。テーブルの内容は、次のようになります。

mysql> select * from coronavirus where id>8000 order by id limit 10;
+------+-------+-----------------+-------------+---------------------+-----------+--------+-----------+----------+-----------+
| id   | place | province        | country     | updated             | confirmed | deaths | recovered | latitude | longitude |
+------+-------+-----------------+-------------+---------------------+-----------+--------+-----------+----------+-----------+
| 8001 | NULL  | Shanghai        | China       | 2020-03-23 14:18:01 |       404 |      4 |       329 |   31.202 |   121.449 |
| 8002 | NULL  | Shanxi          | China       | 2020-03-13 08:56:40 |       133 |      0 |       133 |  37.5777 |   112.292 |
| 8003 | NULL  | Sichuan         | China       | 2020-03-22 07:20:38 |       543 |      3 |       536 |  30.6171 |    102.71 |
| 8004 | NULL  | Sint Maarten    | Netherlands | 2020-03-23 23:19:21 |         2 |      0 |         0 |  18.0425 |  -63.0548 |
| 8005 | NULL  | South Australia | Australia   | 2020-03-23 23:23:20 |       134 |      0 |         6 | -34.9285 |   138.601 |
| 8006 | NULL  | St Martin       | France      | 2020-03-23 23:19:21 |         8 |      0 |         0 |  18.0708 |  -63.0501 |
| 8007 | NULL  | Tasmania        | Australia   | 2020-03-23 23:23:20 |        28 |      0 |         3 | -42.8821 |   147.327 |
| 8008 | NULL  | Tianjin         | China       | 2020-03-23 03:57:57 |       141 |      3 |       133 |  39.3054 |   117.323 |
| 8009 | NULL  | Tibet           | China       | 2020-02-23 11:19:02 |         1 |      0 |         1 |  31.6927 |   88.0924 |
| 8010 | NULL  | Victoria        | Australia   | 2020-03-23 23:23:20 |       355 |      0 |        97 | -37.8136 |   144.963 |
+------+-------+-----------------+-------------+---------------------+-----------+--------+-----------+----------+-----------+

mysql> select count(*) from coronavirus;                                                                                                                           +----------+
+----------+
| count(*) |
+----------+
|    34783 |
+----------+
タム:

このショー前のエントリから増加+最新のエントリ:

SELECT
    cv.country,
    cv.confirmed,
    (cv.confirmed - (
            SELECT
                confirmed
            FROM
                coronavirus
            WHERE
                country = cv.country
                AND id != cv.id
            ORDER BY
                updated DESC
            LIMIT 1)) AS confirmed_increase
FROM
    coronavirus cv
    INNER JOIN (
        SELECT
            MAX(updated) AS updated,
            country
        FROM
            coronavirus
        GROUP BY
            country) cv2 ON cv2.country = cv.country
    AND cv.updated = cv2.updated
WHERE
    cv.updated = cv2.updated;

これは何:として、GROUP BYはそれがすべてのエントリを取得し、唯一のすべての国の最新のエントリを取得するために自分自身にJOINを行いますので、我々は、最初にこの問題を回避するには必要なORDER BYの前に行きます。それはforelastエントリーとなりますので、それは、最新のエントリと同じIDではありません同じ国の最新アイテムを見つけるために、副問合せを使用しています。あなたは、クエリのために他の条件を持っている場合、彼らは同様サブクエリに追加する必要があることに注意してください。

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=402461&siteId=1