簡體   English   中英

Oracle SQL:例如在4個小時內計數和求和?

[英]Oracle SQL: Count and sum in e.g. 4 hours?

對於已經解決的問題,我有一個后續問題( Oracle SQL:4h計數嗎? )。

如果顯示的數據樣本中還有另一列,則為金額列,我想做的所有事情都與解決方案中建議的相同

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

,且金額欄的一個額外條件總和> 10?

因此,查詢應僅列出在4個小時內有6個訂單且sum(order_value)>10那些訂單。

您剛剛得到的解決方案將回顧6行(這可能不是滿足4小時服務的第一個訂單)。 因此,添加另一種分析來保持該解決方案:

select *
from (select t1.*, lag(dt, 6) over (partition by employee order by dt) as ord6dt,
             sum(order_value) over (partition by employee order by dt rows 6 preceding) val
      from emptest t1
     ) 
where dt - ord6dt < 4.0/24
  and val >= 10;

只會再次倒數6行(如果我們在過去四個小時內有超過6個訂單,則可能會錯過一些實際匹配)。

我們可以對此建模:

select *
  from (select *
          from emptest
        model
        dimension by (employee, dt)
        measures (  order_value, order_id, 0 order_sum, 0 number_of_orders)
        rules (
          order_sum[any,any] = sum(order_value)[cv(employee), dt between cv(dt)-(4/24) and cv(dt)],
          number_of_orders[any,any] = count(*)[cv(employee), dt between cv(dt)-(4/24) and cv(dt)]

        ))
 where order_sum > 10
   and number_of_orders >= 6
order by employee, dt;

它會查找4個或更多的number_of_orders,並且還會檢查4小時內的計數。

小提琴: http ://sqlfiddle.com/#!4/ 3045d/1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM