sql >> データベース >  >> RDS >> Mysql

最小値を削除します。 SQLのテーブルの2つの値を比較した後のレコードの値

    このクエリで削除する行を見つけます:

    select t0.* 
    from tbl_entso_cdbf t0
    join tbl_entso_cdbf t1
      on  t1.Utc  = t0.Utc
      and t1.date = t0.date
      and t1.area_in  = t0.area_out
      and t1.area_out = t0.area_in
    where t0.value = 0
      and (t1.value <> 0 or t1.area_in < t0.area_in);
    

    条件は次のとおりです。

    • 値=0
    • 同じUtcの別の行があります 同じdate しかし、 area_in およびarea_out 切り替えられます。
    • 他の行の0ではありません または area_in 小さいです。

    クエリは次の行を返します:

    |               Utc |                date | area_in | area_out | value |
    |-------------------|---------------------|---------|----------|-------|
    | 2015-12-05T03:00Z | 2015-12-05 03:00:00 |      40 |      275 |     0 |
    | 2015-12-06T03:00Z | 2015-12-06 03:00:00 |     175 |      100 |     0 |
    | 2015-11-04T03:00Z | 2015-11-04 03:00:00 |     310 |      280 |     0 |
    | 2016-09-19T00:00Z | 2016-09-19 00:00:00 |     292 |      187 |     0 |
    

    次に、deleteステートメントのサブクエリで使用します。

    delete t1
    from tbl_entso_cdbf t1
    natural join (
        select t0.*
        from tbl_entso_cdbf t0
        join tbl_entso_cdbf t1
          on  t1.Utc  = t0.Utc
          and t1.date = t0.date
          and t1.area_in  = t0.area_out
          and t1.area_out = t0.area_in
        where t0.value = 0
          and (t1.value <> 0 or t1.area_in < t0.area_in)    
    ) t0;
    

    NATURAL JOIN すべての列の値が等しくなければならないことを意味します。主(または任意の一意)キーがある場合は、 * ではなく、サブクエリで主(一意)キー列を選択するだけで済みます。 。

    これで、次の行だけがテーブルに残ります。

    |               Utc |                date | area_in | area_out | value |
    |-------------------|---------------------|---------|----------|-------|
    | 2015-12-05T03:00Z | 2015-12-05 03:00:00 |     275 |       40 |   320 |
    | 2015-12-06T03:00Z | 2015-12-06 03:00:00 |     100 |      175 |   550 |
    | 2015-11-04T03:00Z | 2015-11-04 03:00:00 |     280 |      310 |     0 |
    | 2016-09-19T00:00Z | 2016-09-19 00:00:00 |     187 |      292 |    45 |
    


    1. ロードバランサーを介してデータベースコンポーネントを高可用性(HA)にする

    2. 解析されたデータをPythonからSQLDeveloperのOracleテーブルにエクスポートするにはどうすればよいですか?

    3. 日付時刻の値が正しくありませんデータベースエラー番号:1292

    4. プログラムで複数の列を含むwhere-in句を使用してPostgreSQLクエリを実行するにはどうすればよいですか?