我是Oracle SQL初学者,希望有人可以帮助我。
到目前为止,我有一个非常基本的Select查询。 这是选择点击数据,即用户点击网站上某类按钮的频率。
我的问题是我需要从同一个用户中排除重复或多次点击,但只包括那些重复的用户。
每个用户都有一个唯一ID(CUSTOMER_ID
),我可以获得HIT_DAY或HIT_DATETIME
来识别点击时间。
但是,有些情况下用户需要在同一天点击同一班级的多个按钮。
是否有“让我仅记录用户(CUSTOMER_ID
)不同的内容”或点击时间(HIT_DATETIME
)独特的+/- 10秒?或者我能在这做什么?
我没有其他唯一标识符。
我的查询:
SELECT
owh.HIT_DAY
, owh.HIT_DATETIME
, COUNT(owh.CUSTOMER_ID) AS COUNT_CUSTOMER_ID
, owh.IS_P_CUSTOMER AS P_CUSTOMER
, owh.SHORTENED_URL AS URL_SHORTENED
, owh.MP
FROM
O_WIN_HITS owh
WHERE 1=1
AND ...
AND ...
AND ...
AND ...
GROUP BY
owh.HIT_DAY
, owh.HIT_DATETIME
, owh.IS_P_CUSTOMER
, owh.SHORTENED_URL
, owh.MP
ORDER BY
owh.HIT_DAY DESC
注意:这是较大查询的一部分。
非常感谢您的帮助, 麦克
答案 0 :(得分:1)
我想你想要这样的东西:
select owh.*
from (select owh.*,
lag(hit_datetime) over (partition by customer_id order by hit_datetime) as prev_hdt
from O_WIN_HITS owh
) owh
where prev_hdt is null or
hit_datetime > prev_hdt + 10 / (24 * 60 * 60);
这将返回客户的第一行或上次点击后超过10秒的客户显示的行。