1

どんな体でも私を助けてくれますか?テーブルからクエリを実行したいのですが、その目的は、どの従業員が 100 個以上販売しているかを表示することです。私はそのクエリを実行しましたが、動作します

しかし、各従業員(100個以上の商品を販売した人)の最終販売時間を表示したい場合に問題が発生します

私はTBL_SALESのようなテーブルを持っています

no   employee_id   name          pieces   sl_time
---|-------------|-------------|--------|----------
1  |     1       | bungdito    | 60     | 2012-03-29 22:20
2  |     1       | bungdito    | 40     | 2012-03-05 18:00
3  |     1       | bungdito    | 50     | 2012-02-18 08:00
4  |     2       | addheat     | 120    | 2012-02-12 09:30
5  |     3       | angga       | 20     | 2012-01-18 10:45
6  |     4       | dimas       | 50     | 2012-01-01 08:30

このようなクエリを使用すると

select * from 
( 
  select EMPLOYEE_ID, NAME, sum(PIECES) PIECES from 
  ( 
    select EMPLOYEE_ID, NAME, PIECES
    from DB_SCHEMA.TBL_SALES 
  )  
  group by EMPLOYEE_ID, NAME
) where PIECES > 100

私はこの正しい結果を持っています

 employee_id   name          pieces 
-------------|-------------|--------
     1       | bungdito    | 150    
     2       | addheat     | 120    

上記の結果は正しく

しかし、私が必要とするのは、各従業員の最後のトランザクション時間で完了しています

クエリを作成しようとしましたが、まだ正しくありません

select * from 
( 
  select EMPLOYEE_ID, NAME, sum(PIECES) PIECES, SL_TIME

  ( 
    select EMPLOYEE_ID, NAME, PIECES,(select max(WAKTU) SL_TIME from DB_USER.TR_PELANGGARAN where TB_SALES.EMPLOYEE_ID = EMPLOYEE_ID from TB_SALES) SL_TIME
    from DB_SCHEMA.TBL_SALES 
  )  
  group by EMPLOYEE_ID, NAME, SL_TIME
) where PIECES > 100

そのクエリを使用しても、次のような間違った結果が得られます(sl_time が bungdito と addheat で同じであることを確認してください)。

    employee_id   name          pieces   sl_time
   -------------|-------------|--------|----------
        1       | bungdito    | 150    | 2012-03-29 22:20
        2       | addheat     | 120    | 2012-03-29 22:20

私が必要とするのは、以下のようなものです:

employee_id   name          pieces   sl_time
-------------|-------------|--------|----------
     1       | bungdito    | 150    | 2012-03-29 22:20
     2       | addheat     | 120    | 2012-02-12 09:30
4

2 に答える 2

1
select * 
from 
( 
  select EMPLOYEE_ID, NAME, sl_time
        , sum(PIECES)  over(partition by EMPLOYEE_ID)  SUM_PIECES 
        , max(sl_time) over(partition by EMPLOYEE_ID)  last_sl_time
  from       
    DB_SCHEMA.TBL_SALES 
) 
where SUM_PIECES > 100
and    last_sl_time = sl_time
;
于 2012-08-28T12:29:52.803 に答える
1

これを試して:

  select EMPLOYEE_ID, NAME, sum(PIECES) PIECES, MAX(SL_TIME)
  from DB_SCHEMA.TBL_SALES   
  group by EMPLOYEE_ID, NAME
  having sum(PIECES) > 100
于 2012-08-28T12:35:39.637 に答える