2列のデータをSQLの新しい列として操作する

2列のデータをSQLの新しい列として操作する

以下のように表示されます。

bb_sbからa1、a2、a1+a2 a、a1*a2 b、a1*1.0/a2 cを選択

表 a の列 a1 と a2 を加算して新しい列 a を作成し、列 a1 と a2 を乗算して新しい列 b を作成します。注:

除算を行う場合は型変換を行う必要があります。そうしないと結果は 0 になります。

bb_sb a、bb_cywzbrzb b から a.a1、b.b1、a.a1+b.b1 a を選択

これは 2 つの異なるテーブルの列間の操作です。

補足知識:異なるレコード内の同じ属性列の差を計算するSQL文

使用されるテーブルの具体的な構造は下の図に示すとおりです。

テーブルの主キーは (plateNumber+currentTime) です。

実装するクエリは次のとおりです。

ナンバープレート番号とクエリ時間間隔を指定して、指定された時間間隔に含まれるレコードの currentTime の差をクエリし、AverageSpeed と差の積を計算し、この期間中の最高速度 (HighestSpeed) を見つけて、それを異なるタイプの値に従って分割します。 –>(型値は0と1の2つの値のみを持ちます)

主なアイデアは、まず、指定された時間間隔内で同じ種類の同じナンバープレート番号(つまり、同じ車両)の currentTime の差、たとえば currentTime でソートされた 2 つの隣接するレコードの currentTime の差を取得できることです。これが取得されたら、残りは集計関数を通じて取得できます。

ナンバープレートの番号「京A111111」を例にとり、下の図に示すようにテストケースを設計します。

ナンバープレート番号「京A111111」の車両には6件の記録があり、そのうちタイプ0の記録が2件、タイプ1の記録が4件あることがわかります。

まず時間差を計算し、SQL ステートメントは次のように記述されます。

SELECT a.platenumber、 
  a.現在の時刻、 
  a.タイプ、 
  a.平均速度、 
  a.最高速度、 
  現在の時刻 - (現在の時刻を選択 
      carmultispeedinfoより 
      ここで、プレート番号 = a.プレート番号 
        AND タイプ = a.type 
        AND 現在の時刻 < a.現在の時刻 
      ORDER BY 現在の時刻 DESC 
      制限 1)AS 時間差 
carmultispeedinfoより

Navicat を使用すると、次の図に示すようにクエリ結果を確認できます。

timediff の値が正しいことを確認してから、それに基づいてコンテンツを追加できます。

完全な SQL ステートメントは次のとおりです。

SELECT Sum(aa.averagespeed * aa.timediff) AS milesdiff、 
  Max(aa.highestspeed) AS 最高速度、 
  合計(aa.timediff) AS timediff、 
  aa.タイプ 
FROM (SELECT a.platenumber, 
    a.現在の時刻、 
    a.タイプ、 
    a.平均速度、 
    a.最高速度、 
    現在の時刻 - (現在の時刻を選択 
        carmultispeedinfoより 
        ここで、プレート番号 = a.プレート番号 
          AND タイプ = a.type 
          AND 現在の時刻 < a.現在の時刻 
        ORDER BY 現在の時刻 DESC 
        制限 1) AS 時間差 
  carmultispeedinfoより a)aa 
ここで、aa.platenumber = '京A111111' 
  かつ、aa.currenttime >= 1521790124670 
  かつ、aa.currenttime <= 1521790125685 
GROUP BY aa.type

結果は次のとおりです。

確認後、希望通りの結果が得られました。次に、mybatis マッパー ファイルに対応する SQL を置き換えます。 <記録、メモ> 今後、理解が深まったら更新していきます。皆様、ありがとうございます、参考になれば幸いです、そして123WORDPRESS.COMを応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySQL の複数のレコードの同じフィールドを異なる値に一括更新する方法
  • 1 つ以上のフィールドに基づいて重複データを検索する MySQL SQL ステートメント
  • MySQLは2つの日付間の日数、月数、年数を計算します

<<:  Vue2 における 12 種類のコンポーネント通信

>>:  Windows 10 で Hyper-V サービスをシャットダウンするいくつかの方法

推薦する

Linux 上の LAN 内のすべてのホスト名 (コンピュータ名) をすばやく一覧表示するスクリプト

最近、LAN 内のすべてのホスト名を一覧表示する必要があります (SMB プロトコル)。しかし、fi...

Linux 上の Nginx に複数のバージョンの PHP をインストールする

サーバーの LNPM 環境をインストールして構成する場合、複数のバージョンの PHP の共存を考慮す...

モバイル開発における 1px ラインの理解と解決策

1pxの線が太くなる理由モバイルプロジェクトに取り組むとき、設計図に従って要素ノードのサイズとスタイ...

Vue コンポーネントの構成構造とコンポーネント登録の詳細

目次1. コンポーネントの構成2. コンポーネント名2.1 コンポーネントの命名3. グローバル登録...

15 分で学べる並列アーティファクト GNU Parallel 入門ガイド

GNU Parallel は、1 台以上のコンピューター上で計算タスクを並列に実行するためのシェル ...

docker view container log コマンドの実装

なぜログを読む必要があるのでしょうか?たとえば、コンテナの起動に失敗したがプロンプトが表示されない場...

MySQL ロックブロッキングの詳細な分析

日常のメンテナンスでは、スレッドがブロックされることが多く、データベースの応答が非常に遅くなります。...

Ubuntu 18.04 は mysql 5.7.23 をインストールします

以前、Ubuntu 16.04 に MySQL をスムーズにインストールしました。今回、Ubuntu...

Vueスロットの使用の詳細

目次1. スロットを使用する理由1.1 スロット1.2 コンポーネントのスロット1.3 例2. この...

MySQL における制限関数と合計関数の混在使用の問題の詳細な説明

序文今日、注文データを同期した後、同僚は、合計注文金額とデータソースの合計金額に差があったため、LI...

MySQL における大規模オブジェクトのマルチバージョン同時実行制御の詳細な説明

MySQL 8.0: InnoDB のラージ オブジェクトに対する MVCCこの記事では、MySQL...

テキスト ファイルの並べ替えに役立つ Awk コマンドラインまたはスクリプト (推奨)

Awk は、ソートを含む他の一般的なユーティリティによって実行できるいくつかのタスクを実行できる強...

シンプルなプログレスバーを作成するための HTML+CSS

1. HTMLコードコードをコピーコードは次のとおりです。経験値: <span class=...

MySQLで数千万のテストデータを素早く作成する方法

述べる:この記事で扱うデータ量は 100 万です。数千万のデータが必要な場合は、量を増やすだけで済み...

Node.js ファイルのコピー、フォルダの作成、その他の関連操作

NodeJS は次のファイルをコピーします:通常、小さなファイルのコピー操作では、ストリーム パイプ...