提取与最接近另一个日期的日期关联的值

kiki1113

我有2张桌子。第一个是个人(ID)列表和交易日期。第二个是客户历史记录表,其中包含一段时间内客户数据的快照。我有兴趣获取最接近但在交易日期之前的运行日期的成员身份标志。

*编辑:我尝试使用TOP 1,并且排名/分区...但是它们花费的时间太长了。我无权在表上创建索引。这是让我得到我所需要的查询:

SELECT  t1.*, t2.RunDate, t2.CST_ISMEMBER 
FROM table1 t1
INNER JOIN table2 t2 
   ON t1.ID=t2.ID
   AND t2.RunDate = 
            (SELECT MAX(t2b.RunDate) 
            FROM table2 t2b  
            WHERE t2b.ID=t2.ID AND t1.TransDate >= t2b.RunDate)

更多编辑*我发现对于表1中的大约9000个人,表2中的运行日期发生在交易日期之后。因此,现在我需要找到交易的关闭日期(之前或之后)。努力找到不涉及超过排名/分区或前1名的datediff解决方案,这给我带来了索引问题的困扰。我必须在5分钟后终止查询,以免被IT大吼大叫;-)这些是表2上可用的最大索引。

在此处输入图片说明

    TABLE 1 
ID   TransDate 
1    8/20/13
2    9/5/14

TABLE 2
ID   RunDate      IsMember
1    6/30/2010    Y
1    7/11/2012    N
1    7/30/2013    N
1    8/15/2013    Y
2    9/1/2014     Y
2    9/10/2014    N 

所需结果:

ID  TransDate   IsMember
1   8/20/13     N
2   9/5/14      Y

解决此问题的最佳方法是什么?

提前致谢。

戈登·利诺夫

相关子查询是一种简单的方法。代码如下所示:

select t1.*,
       (select top (1) t2.ismember
        from table2 t2
        where t2.id = t1.id and t2.rundate < t1.transdate
        order by t2.rundate desc
       ) as ismember
from table1 t1;

为了提高性能,您需要一个索引table2(id, rundate, ismember)

编辑:

您对此有糟糕的索引。这个历史记录表如何无法建立索引id非常奇怪。这是使用窗口函数的完全不同的方法。

with t as (
      select id, transdate as dte, null as ismember, 1 as which
      from table1
      union all
      select id, rundate, ismember, 2
      from table2
     )
select t.*
from (select t.*, lag(ismember) over (partition by id order by dte, which desc) as ismember
      from t
     ) t
where which = 1;

我怀疑所有lag()联合数据都将比尝试解决第一种方法快。但是,使用适当的索引,第一个会更快。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

确定与另一个日期值Teradata最接近的日期

如何找到日期最接近另一个日期的值

在R中的另一个数据框中选择日期最接近特定日期的行

如何使用Python / Pandas从另一个df中提取日期范围最接近记录的1条相关记录?

您如何确定组中与另一个日期最接近的日期而不在两个Pandas DataFrame之间切换?

另一列中下一个最接近的日期时间

如何在Pandas Dataframe中获取最接近另一个值的值

如何从列表中选择值最接近 Ansible 中的另一个值的项目

从 .csv 中获取最接近另一个数据帧中的值的值

在一个查询中查找最接近的日期

SQL:查找下一个最接近的日期

比较now()并返回最接近的上一个日期和最接近的下一个日期SQL

查找时间上最接近另一个的值

UPDATE列数据具有与Oracle上另一个表最接近的值

在另一个表中查找与值最接近的匹配

给定R中的条件,找到最接近另一个值的位置

如何根据另一个变量提取具有相同最大日期的dup值?

如何找到一个向量中与另一个向量最接近(最近)的值?

按最接近值从一个向量到另一个向量的索引

将值匹配到R中另一个列表中最接近的较大值

如何在大型排序数组中高效找到最接近另一个值X的值

将值匹配到R中另一个数组中的最接近值

查找另一个矩阵中矩阵中每一行的最接近值

根据日期范围和另一个没有 0 的标准提取唯一的不同值

用另一个数组中最接近的值替换numpy数组中的元素

向量化为另一个数组中的每个元素在数组中找到最接近的值

在另一个表上将数字四舍五入到最接近的值

通过在两个数据框中的某些列中找到最接近的值,从一个数据框中提取行以加入另一个数据框

我无法从日期输入值到另一个 var angularjs 获取日期