1

多くのレコードのテーブルを持つoracle10gデータベースがあります。表には、ある種の注文を受けた従業員のデータがあります。最も使用可能な列は、employee、dt、およびorderIdです(例を添付しました)。4時間以内に6件以上の注文があった従業員のレコードを選択するselectを作成したいと思います通常の結合、さまざまな機能を使用しましたが、それでも使用可能な選択を行いませんでした。過去(4時間)のレコード検索ごとにそれを選択して、同じ従業員に6つの注文があるかどうかを確認できませんでした。

任意のヘルプや解決策をいただければ幸いです。

BR、

IJ

http://sqlfiddle.com/#!2/77418/1

selectの出力は次のようになります。

ジョー19.2.201313:28:0936589589

ジョー19.2.201313:50:5936589593

マット19.2.201313:57:0236589594

ジョー19.2.201314:19:4636589598

ベニー19.2.201314:50:2836589601

ベニー19.2.201314:54:5836589602

ベニー19.2.201314:56:3536589603

レイ19.2.201315:26:3936589607

レイ19.2.201315:26:4136589608

レイ19.2.201315:26:4436589609

レイ19.2.201315:48:1136589611

ベニー19.2.201316:48:5236589614

ベニー19.2.201316:49:4036589615

ベニー19.2.201316:50:3836589616

ジョニー19.2.201317:37:3336589620

ジョニー19.2.201317:51:4136589621

ジョー19.2.201318:16:5536589625

ジョニー19.2.201318:34:1436589626

マット19.2.201321:13:5036589632

4

2 に答える 2

3

lag()これは、次の関数を使用して実行できます。

select t.*, 
from (select t.*, lag(dt, 6) over (partition by employeeId order by dt) as ord6dt
      from t
     ) t
where dt - ord6dt < 4.0/24

これは、現在の前の注文6を調べて、日付を比較するだけです。時間差が4時間未満の行のみが保持されます。

于 2013-02-20T14:36:46.503 に答える
0

このような何かがそれを行う必要があります:

select distinct employee
  from (select employee, dt, orderid,
               (select count(*)
                    from emp_data ed2
                   where ed2.employee = ed.employee
                     and ed2.dt >= ed.dt
                     and ed2.dt <= ed.dt + (4/24)) cnt
            from emp_data ed)
 where cnt >= 6;

または、09:00:00〜13:00:00までカウントしたくないが、12:59:59までしかカウントしたくない場合は、に置き換えand ed2.dt <= ed.dt + (4/24)ますand ed2.dt < ed.dt + (4/24)

于 2013-02-20T14:01:48.387 に答える