各データセットでの最長時間の SQL クエリ

各データセットでの最長時間の SQL クエリ

序文

まずビジネス要件を理解しましょう。ブロガーは長い間バックエンドについて書いていませんでしたが、この文章は私の知識の盲点を直撃しました。簡単に復元しましょう。ここではテーブルを使用してテーブルのフィールドをシミュレートします。テーブル
ここに画像の説明を挿入します
内容は次のとおりです。 . 私たちの要件は、同じ名前のデータを抽出することです。「皆さんは最初に何を考えるかわかりません。最初に思いついたのは、グループを使うことでした。当時は、グループ化というとただのグループだと思っていました。とても簡単でした。それから試してみた結果、こうなりました。そうではないようです。それから私はエラー解決の旅を始めました。

ここに画像の説明を挿入します

ここに画像の説明を挿入します

ここに画像の説明を挿入します

ここに画像の説明を挿入します

諦めかけたとき、ふと我に返り、この条件についてよく考えてみたところ、名前と最新時刻をそれぞれ取り出して、名前と最新時刻から直接確認するだけではないでしょうか。時間?最新記録じゃないですか??

それでは、その方法を見てみましょう。

コード

まず、最初のステップは、各名前に対応する最新の時刻を見つけることです。

select name, max(dtime) from test group by name;

+------+---------------------+
| name | max(dtime)          |
+------+---------------------+
| xw   | 2023-05-22 20:01:43 |
| ll   | 2023-05-26 20:01:54 |
| oo   | 2023-05-03 20:01:56 |
+------+---------------------+

次に、上でクエリしたデータとテーブル内のデータを左結合するだけです。

select t2.* from (select t.name, max(t.dtime) dtime from test t group by name) t1 left join test t2 on t1.name=t2.name and t1.dtime=t2.dtime;

+----+------+---------------------+------+
| id | name | dtime               | info |
+----+------+---------------------+------+
|  2 | xw   | 2023-05-22 20:01:43 | 5-22 |
|  5 | ll   | 2023-05-26 20:01:54 | 5-26 |
|  6 | oo   | 2023-05-03 20:01:56 | 5-03 |
+----+------+---------------------+------+
3 rows in set (0.07 sec)

それなら大丈夫です

要約する

実はとても単純で、何も考えずにボーッとしていただけだったので、記録しに来ました。

ちなみに、より効率的な方法がないか専門家に質問したいのですが、もし便利であれば、コメント欄で共有してください。

ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/qq_43627076/article/details/130814084