LeetCode の SQL 実装 (197. 気温上昇)

LeetCode の SQL 実装 (197. 気温上昇)

[LeetCode] 197.気温上昇

Weather テーブルが指定されている場合、前の日付 (昨日の日付) と比較して気温が高いすべての日付の ID を検索する SQL クエリを記述します。

+---------+------------+------------------+
| ID(INT) | 日付(DATE) | 温度(INT) |
+---------+------------+------------------+
| 1 | 2015-01-01 | 10 |
| 2 | 2015-01-02 | 25 |
| 3 | 2015-01-03 | 20 |
| 4 | 2015-01-04 | 30 |
+---------+------------+------------------+

たとえば、上記の Weather テーブルに対して次の ID を返します。

+----+
| ID |
+----+
| 2 |
| 4 |
+----+

この問題では、天気表が与えられ、前日よりも気温が高い ID を見つけるように求められます。ID は必ずしも順番に並べられているわけではないので、日付に基づいて前日を見つける必要があります。MySQL 関数 Datadiff を使用して、2 つの日付の差を計算できます。制約は、気温が高く、日付の差が 1 であることです。以下のコードを参照してください。

解決策1:

天気 w1、天気 w2 から w1.Id を選択
w1.Temperature > w2.Temperature かつ DATEDIFF(w1.Date, w2.Date) = 1;

次のソリューションでは、MySQL TO_DAYS 関数を使用して日付を日数に変換し、残りは上記と同じです。

解決策2:

天気 w1、天気 w2 から w1.Id を選択
w1.Temperature > w2.Temperature かつ TO_DAYS(w1.Date) = TO_DAYS(w2.Date) + 1 の場合;

以下のコードに示すように、Subdate 関数を使用して日付から 1 を減算することもできます。

解決策3:

天気 w1、天気 w2 から w1.Id を選択
w1.Temperature > w2.Temperature かつ SUBDATE(w1.Date, 1) = w2.Date;

最後に、まったく異なるソリューションが使用されます。2 つの変数 pre_t と pre_d は、それぞれ前回の気温と前回の日付を表すために使用されます。現在の気温は前回の気温よりも高く、日付の差は 1 である必要があります。上記の 2 つの条件が満たされている場合は、それが Id として選択され、そうでない場合は NULL になります。次に、pre_t と pre_d が現在の値に更新され、選択された Id は空ではありません。

解決策4:

SELECT ID FROM (
SELECT CASE WHEN Temperature > @pre_t AND DATEDIFF(Date, @pre_d) = 1 THEN Id ELSE NULL END AS Id,
@pre_t := 温度、@pre_d := 日付 
FROM Weather、(SELECT @pre_t := NULL, @pre_d := NULL) AS init ORDER BY Date ASC
) id が NULL ではない場合;

参考文献:

https://leetcode.com/discuss/33641/two-solutions

https://leetcode.com/discuss/52370/my-simple-solution-using-inner-join

https://leetcode.com/discuss/86435/a-simple-straightforward-solution-and-its-very-fast

これで、LeetCode (197. 気温上昇) の SQL 実装に関するこの記事は終了です。気温上昇の SQL 実装に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • LeetCode の SQL 実装 (196. 重複するメールボックスを削除する)
  • SQL 実装 LeetCode (185. 部門内で最も給与の高い上位 3 名)
  • LeetCode の SQL 実装 (184. 部門内で最も高い給与)
  • LeetCode の SQL 実装 (183. 注文をしたことがない顧客)
  • LeetCode の SQL 実装 (182. 重複するメールボックス)
  • LeetCode の SQL 実装 (181. 従業員は管理職よりも収入が高い)
  • SQLはLeetCodeを実装します(180.連続した数字)
  • LeetCode の C++ 実装 (組み合わせの最大数は 179)

<<:  検索ボックスのデフォルトテキストを設定します。マウスをクリックするとデフォルトテキストは消えます。

>>:  レスポンシブなアコーディオン効果を実現するための CSS3 の詳細な説明

推薦する

Dockerfileを使用してDockerイメージを構築する手順

Dockerfile は、命令を含むテキスト ファイルです。各命令はレイヤーを構築するため、各命令の...

動的および静的分離を実装するための Nginx サンプル コード

この記事のシナリオと組み合わせて、Nginx と Java 環境 (SpringBoot プロジェク...

CSSで記事の区切り線のスタイルを実装するさまざまな方法のまとめ

この記事では、CSS で記事の区切り線を実装するさまざまな方法をまとめています。区切り線はページを美...

MySQL解凍版のインストール手順の詳しい説明

1. 公式サイトにアクセスします: D:\mysql-5.7.21-winx64\bin をダウンロ...

jQueryはシンプルなポップアップウィンドウ効果を実装します

この記事では、簡単なポップアップウィンドウ効果を実現するためのjQueryの具体的なコードを参考まで...

dockerにmysqlをインストールした後にNavicatが接続できない問題に対する完璧な解決策

1. Dockerがイメージをプルするdocker pull mysql (デフォルトで最新バージョ...

Vue3 の参照と参照の詳細

エディターは、Vue3のデータの関連する問題も共有します。次のような例を見てみましょう。 Vue.c...

WeChat アプレット計算機の例

WeChatアプレット計算機の例、参考までに、具体的な内容は次のとおりです。インデックス.wxml ...

CSS インライン スタイル、埋め込みスタイル、外部参照スタイルを使用する 3 つの方法

3 つの方法を使用する簡単な例は次のとおりです。インラインスタイル: <!doctypehtm...

Docker プライベート サーバー イメージを定期的にクリーンアップする方法

CI を利用してリリース用の Docker イメージをビルドすることで、全員のバージョンリリース効率...

CSSアニメーションとSVGを組み合わせてエネルギーの流れの効果を作成する

最終的な効果は次のようになります。アニメーションは2つのステップに分かれていますランニング軌道を開発...

少なくとも7日間連続して注文を行ったユーザーに対するSQLクエリ

テーブルを作成するテーブル order(id varchar(10),date datetime,o...

MySQLの始め方から諦め方まで徹底解説 - インストール

学ぶ内容1. ソフトウェアのインストールとサーバーの設定。 2. (オプションですが、強くお勧めしま...

MySQLデータベースの基礎知識と操作のまとめ

この記事では、例を使用して、MySQL データベースの基本的な知識と操作について説明します。ご参考ま...