Oracle SQL:在其他列中选择两列的不同组合

时间:2017-05-18 11:49:43

标签: sql oracle select distinct

我是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

注意:这是较大查询的一部分。

非常感谢您的帮助, 麦克

1 个答案:

答案 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秒的客户显示的行。