【问题标题】:Oracle SQL: Select Distinct combination of two columns among other columnsOracle SQL:在其他列中选择两列的不同组合
【发布时间】:2017-05-18 11:49:42
【问题描述】:

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

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

非常感谢您的任何帮助, 迈克

【问题讨论】:

  • 解释不清楚。你能展示一些示例数据和预期的输出吗?
  • 所以当用户点击一次,9秒后,9秒后,9秒后,我把这四个算作一次点击。当用户单击一次,然后是 9 秒后,然后是 11 秒后,然后是 9 秒后,我将这四次视为两次单击。对吗?

标签: sql oracle select distinct


【解决方案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 秒后出现的行。

【讨论】:

  • 非常感谢,戈登 - 这正是我在这里寻找的。巨大的帮助! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-22
  • 2023-03-02
  • 1970-01-01
  • 2011-12-24
  • 1970-01-01
  • 2021-11-12
相关资源
最近更新 更多