首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Oracle Responsys中获取前一小时内的已放弃carters

在Oracle Responsys中获取前一小时内的已放弃carters
EN

Stack Overflow用户
提问于 2016-07-10 05:21:55
回答 2查看 122关注 0票数 0

我正在试着把那些20分钟前和2小时前有约会的人从桌子上拉出来。这似乎抓住了正确的时间,但都是4个小时前的:

代码语言:javascript
运行
复制
SELECT * 
FROM $A$ 
WHERE ABANDONDATE >= SYSDATE - INTERVAL '2' HOUR 
  AND ABANDONDATE <  SYSDATE - INTERVAL '20' MINUTE 
  AND EMAIL_ADDRESS_ NOT IN(SELECT EMAIL_ADDRESS_ FROM $B$ WHERE ORDERDATE >= sysdate - 4)

此外,它为每个人抓取每一条记录,我只想为每个电子邮件地址放弃最近的产品(最高放弃日期)。我似乎想不通这件事。

EN

回答 2

Stack Overflow用户

发布于 2016-07-10 06:07:39

如果结果正好是四小时前的,则可能存在时区不匹配。您的数据库中ABANDONDATE的确切数据类型是什么?也许是带有时区的时间戳?四个小时似乎是UTC和美国东部时间(美国东部,夏令时偏移)之间的差异。

对于你的另一个问题,你期望你的查询只挑选最近放弃的产品吗?您的查询中的哪一部分会这样做?相反,您需要添加row_number() over (partition by [whatever identifies clients etc.] order by abandondate),使结果查询成为一个子查询,并将其包装在一个外部查询中,在该外部查询中,您可以通过(WHERE子句) rn = 1进行过滤。如果您向我们显示表结构(表中列的名称和数据类型-仅相关列-包括哪些是主键或哪些是主键),我们可以提供帮助。

票数 0
EN

Stack Overflow用户

发布于 2016-07-10 12:58:54

试一试

代码语言:javascript
运行
复制
SELECT * FROM (
    SELECT t.*,
           row_number() 
             over (PARTITION BY email_address__ ORDER BY ABANDONDATE DESC) As RN 
    FROM $A$ t
    WHERE ABANDONDATE >= SYSDATE - INTERVAL '2' HOUR 
      AND ABANDONDATE <  SYSDATE - INTERVAL '20' MINUTE 
      AND EMAIL_ADDRESS_ NOT IN(
            SELECT EMAIL_ADDRESS_ FROM $B$ 
            WHERE ORDERDATE >= sysdate - 4)
)
WHERE rn = 1

另一种方法

代码语言:javascript
运行
复制
SELECT *
FROM $A$
WHERE (EMAIL_ADDRESS_, ABANDONDATE) IN (
    SELECT EMAIL_ADDRESS_, MAX( ABANDONDATE )
    FROM $A$
    WHERE ABANDONDATE >= SYSDATE - INTERVAL '2' HOUR 
          AND ABANDONDATE <  SYSDATE - INTERVAL '20' MINUTE 
          AND EMAIL_ADDRESS_ NOT IN(
                SELECT EMAIL_ADDRESS_ FROM $B$ 
                WHERE ORDERDATE >= sysdate - 4)
    GROUP BY EMAIL_ADDRESS_
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38286471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档