首页 > 解决方案 > Sybase IQ - 提取最近日期不是今天的最近 30 天的数据

问题描述

目标:从具有可变结束日期的表中提取最近 30 天的数据

背景:我有一个包含购买信息的表,但该表仅每两周更新一次,因此数据存在滞后。某天可能会落后 14 天,而其他天可能会落后 13 或 15 天。

我的表包含一个 DATE_KEY 列,该列连接到该键上的 DATE_DIM 表,这是我从中提取日期字段的位置。我会使用 GETDATE 或 CURRENT_DATE 但由于滞后,这在我的情况下是不合适的。

我正在使用 Sybase IQ,我相信我不能在 where 子句中使用 select 语句来比较日期,我收到以下错误:

Feature, scalar value subquery (at line 63) outside of a top level SELECT list, is not supported.

这就是我想要做的

WHERE
        TIME.[DAY] >= DATEADD(dd,-30,(  SELECT 
                                        MAX([TIME1].[DAY]) 
                                        FROM DB.DATE_DIM TIME1 
                                        JOIN DB.PURCHASES PURC 
                                        ON TIME1.KEY = PURC.KEY))

鉴于上述限制,我如何提取最近 30 天的数据?

标签: sqlsybasesap-iq

解决方案


根据Sybase IQ 文档,您可以使用与子查询的比较,因此您可以将连接添加DATE_DIM到主 FROM 子句,然后将其与类似于您的子查询进行比较,只需将其DATEADD移入即可。在下面的代码中,我假设DATE_DIM主 FROM 子句中的别名是TIME0.

WHERE
     TIME0.[DAY] >= (SELECT  DATEADD(dd,-30, MAX([TIME1].[DAY]))
                     FROM DB.DATE_DIM TIME1 
                     JOIN DB.PURCHASES PURC 
                     ON TIME1.KEY = PURC.KEY
                    )

推荐阅读