私はいくつかのコロナウイルスの統計をやっています。あなたは、クエリで私を助けてくださいます。私が最後に感染して取得したいのですが、それぞれの国の成長(フィールド「を確認しました」)。それは最後から二番目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ではありません同じ国の最新アイテムを見つけるために、副問合せを使用しています。あなたは、クエリのために他の条件を持っている場合、彼らは同様サブクエリに追加する必要があることに注意してください。