Oracle SQLは、同じテーブルの行を比較します

Aerondight

テーブル:

日付shopId量
17-MAY-19 1 100 
17-MAY-19 2 20 
16-MAY-19 2 20 
17-APR-19 1 50

要件に従って、同じテーブルのレコードを見つける必要があります。

sysdateなどの日付を指定して、各shopIdのその日付のレコード(日付は各shopIdで一意)と30日前のレコードを検索します。

2つのレコードの量を比較して、絶対%diffが5より大きいかどうかを確認します(以下のコードでは、%の代わりに0.05を使用します)。

2つのレコードの両方が存在し、%diffが一致する場合、レコードは結果セットに含まれている必要があります。

すべてshopIdに対してこれを実行し、結果セットを返します。

レコードを取得して、JAVAやPHPなどのバックエンド言語で比較することはできますが、慣れていないSQLで比較する方がよいのではないかと思います。

select * 
from table t1 
inner join table t2 on t1.shopId = t2.shopId 
WHERE t1.ordertime = sysdate 
  and t2.ordertime = sysdate - 30 
  and abs( (t1.amount - t2.amount) / t2.amount > 0.05 ) 

期待される結果は次のようになります。

表:
shopId Date1 amount1 Date2 amount2 
  1 17-MAY-19 100 17-APR-19 50

助けてください、ありがとう。

ホットフィックス

sysdateには常に現在の日付と時刻が含まれているため、trunc関数を使用する必要がありますsysdate

with tab as(
  select to_date('17.05.2019','dd.mm.yyyy') as dat, 1 as shopid, 100 as amount from dual union all
  select to_date('17.05.2019','dd.mm.yyyy') as dat, 2 as shopid, 20 as amount from dual union all
  select to_date('16.05.2019','dd.mm.yyyy') as dat, 2 as shopid, 20 as amount from dual union all
  select to_date('17.04.2019','dd.mm.yyyy') as dat, 1 as shopid, 50 as amount from dual 

)

select * 
from tab t1 
join tab t2 on t1.shopid = t2.shopid 
WHERE t1.dat = trunc(sysdate)
  and t2.dat = trunc(sysdate - 30)
  and (t1.amount - t2.amount) / t2.amount > 0.05

結果

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Oracle SQL-同じテーブルの2つのセット間の行数を比較する方法は?

分類Dev

Oracle SQL:同じテーブルの別の列のデータでテーブルを更新します

分類Dev

Oracle SQL Pivotは、同じテーブルから追加の列をクエリします

分類Dev

同じテーブルのOracleの2つの連続する行を比較する

分類Dev

Oracleの同じテーブル内の複数の列を比較するSQLクエリ

分類Dev

Oracle SQL:同じテーブルを結合して目的の出力を取得する

分類Dev

Oracle SQLは、同じテーブルを不明な回数、サイクルで左結合します

分類Dev

Oracleはselectmax +1を同じテーブルに挿入します

分類Dev

Oracle-同じ列名で複数のテーブルを更新します

分類Dev

Oracle Triggerは、同じテーブル内の別の列からの情報で列を更新します

分類Dev

Oracle SQLは、複数のテーブルにわたって同じフィールドをカウントします

分類Dev

Oracle:同じテーブルの集計値でテーブルの値を更新します

分類Dev

Oracleは、クエリの結果をテーブルと比較します

分類Dev

同じグループ内の前の行の値を持つ行を返します(Oracle Sql)

分類Dev

Oracle SQLは、CTEを使用して同じ行の値を取得します

分類Dev

ORACLE SQLを使用して、IDが異なる同じテーブルから重複を検索しますか?

分類Dev

Oracle SQLは同じデータをループし、現在の日付に基づいて計算します

分類Dev

同じテーブルで内部結合を使用してテーブルの値を更新するOracle

分類Dev

SQLCTEは同じテーブルの行を比較します

分類Dev

ORACLE SQLは、サブクエリまたは派生テーブルなしでn行を取得します

分類Dev

同じテーブルのvarcharフィールドに基づくシーケンス番号でOracleテーブルの列を更新します

分類Dev

テーブルの名前を変更してから、Oracleで同じ名前のテーブルを作成します

分類Dev

Oracleは、パイプ記号のあるテーブルの内容を比較します

分類Dev

同じテーブル内の関連する行の前の値をフェッチするOracleクエリ

分類Dev

Oracle SQLは、テーブル全体で複数の合計を返します

分類Dev

Oracle、テーブルからほぼ同じ行を削除する方法

分類Dev

Oracle-最初の列をグループ化し、残りを同じ行にグループ化します

分類Dev

同じテーブルに複数の行を挿入する方法-Oracle10g

分類Dev

Oracleは複数のテーブルを結合しますか?

Related 関連記事

  1. 1

    Oracle SQL-同じテーブルの2つのセット間の行数を比較する方法は?

  2. 2

    Oracle SQL:同じテーブルの別の列のデータでテーブルを更新します

  3. 3

    Oracle SQL Pivotは、同じテーブルから追加の列をクエリします

  4. 4

    同じテーブルのOracleの2つの連続する行を比較する

  5. 5

    Oracleの同じテーブル内の複数の列を比較するSQLクエリ

  6. 6

    Oracle SQL:同じテーブルを結合して目的の出力を取得する

  7. 7

    Oracle SQLは、同じテーブルを不明な回数、サイクルで左結合します

  8. 8

    Oracleはselectmax +1を同じテーブルに挿入します

  9. 9

    Oracle-同じ列名で複数のテーブルを更新します

  10. 10

    Oracle Triggerは、同じテーブル内の別の列からの情報で列を更新します

  11. 11

    Oracle SQLは、複数のテーブルにわたって同じフィールドをカウントします

  12. 12

    Oracle:同じテーブルの集計値でテーブルの値を更新します

  13. 13

    Oracleは、クエリの結果をテーブルと比較します

  14. 14

    同じグループ内の前の行の値を持つ行を返します(Oracle Sql)

  15. 15

    Oracle SQLは、CTEを使用して同じ行の値を取得します

  16. 16

    ORACLE SQLを使用して、IDが異なる同じテーブルから重複を検索しますか?

  17. 17

    Oracle SQLは同じデータをループし、現在の日付に基づいて計算します

  18. 18

    同じテーブルで内部結合を使用してテーブルの値を更新するOracle

  19. 19

    SQLCTEは同じテーブルの行を比較します

  20. 20

    ORACLE SQLは、サブクエリまたは派生テーブルなしでn行を取得します

  21. 21

    同じテーブルのvarcharフィールドに基づくシーケンス番号でOracleテーブルの列を更新します

  22. 22

    テーブルの名前を変更してから、Oracleで同じ名前のテーブルを作成します

  23. 23

    Oracleは、パイプ記号のあるテーブルの内容を比較します

  24. 24

    同じテーブル内の関連する行の前の値をフェッチするOracleクエリ

  25. 25

    Oracle SQLは、テーブル全体で複数の合計を返します

  26. 26

    Oracle、テーブルからほぼ同じ行を削除する方法

  27. 27

    Oracle-最初の列をグループ化し、残りを同じ行にグループ化します

  28. 28

    同じテーブルに複数の行を挿入する方法-Oracle10g

  29. 29

    Oracleは複数のテーブルを結合しますか?

ホットタグ

アーカイブ