[英]Sql applying a floor to Datetime, Where the floor is not standard e.g. every 2 hours, every 2 day etc
[英]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小時內的計數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.