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 サービスをシャットダウンするいくつかの方法

推薦する

ウェブページの読みやすさを向上させるいくつかの方法

1. 対照的な色を使用します。ここでのコントラストとは、テキストの色と背景色のコントラストを指します...

権限の問題によりMySQLの設定ファイルmy.cnfを起動できない問題の解決方法

この記事では、権限の問題により MySQL 構成ファイル my.cnf を起動できない場合の関連する...

Linux で固定 IP を設定する方法 (テスト済みで効果的)

まず、仮想マシンを開きます xshell5 を開いて仮想マシンに接続します (より便利です。Linu...

HTTPS の原則の説明

HTTPS ウェブサイトの構築コストが下がるにつれて、ほとんどのウェブサイトが HTTPS プロトコ...

docker に基づいて nginxssl 設定を開始する

前提条件クラウドサーバー(Alibaba Cloud、Tencent CloudなどのcentOS)...

シーケンス関数を実装する MySQL コード

MySQLはシーケンス関数を実装する1. シーケンスレコードテーブルを作成する テーブル `sys_...

Vue3+Vue-cli4 プロジェクトで Tencent スライダー検証コードを使用する方法

導入:従来の画像検証コードと比較して、スライダー検証コードには次の利点があります。サーバーは検証コー...

Vueはスライダードラッグ検証機能の全プロセスを実現します

レンダリング 骨組みを定義し、HTMLとCSSを記述するHTML部分 <テンプレート> ...

W3Cチュートリアル(16):その他のW3Cの活動

このセクションでは、その他の重要かつ興味深い W3C アクティビティの概要を説明します。このセクショ...

Vue のトランジション効果とアニメーショントランジションの使用例の詳細な説明

目次遷移フック関数カスタム遷移クラス名遷移グループの使用まとめまずは例を見てみましょうコードは次のと...

JS 非同期コードユニットテストの魔法 Promise

目次序文プロミスチェーンMDN エラー連鎖デフォルト処理略語非同期待機序文この記事を書いた理由は、ユ...

vuex での mapState の考え方の応用

目次1. マップ方式2. 応用背景:需要開発プロセス中に、一部のインターフェースは、ページに表示する...

RoughViz を使用して Vue.js でスケッチされたチャートを視覚化する方法

導入チャートは、データ セットを読みやすくし、その各部分を区別しやすくするために使用されるデータのグ...

Dayjs を使用して Vue で一般的な日付を計算する方法

vue を使用してプロジェクトを開発する場合、フロントエンドでは次のような日付と時刻を計算する必要が...

Mysqlはフィールドスプライシングのための3つの関数を実装している

データをオペレーションにエクスポートする場合、フィールドの結合は避けられません。MySQL でこれが...