Sql 选择具有更多条件的最新记录

Sql 选择具有更多条件的最新记录,sql,sql-server-2008,record,Sql,Sql Server 2008,Record,将只提取大多数当前记录。这意味着在上述场景中 Exp date-如果null记录仍处于活动状态。 如果大于当前时间戳,则表示其未来的exp日期,这表示仍处于活动状态。 如果小于当前时间戳,则终止。 Most current是最活跃或最新终止的记录。如果它已激活并终止,则仅显示激活。否则最后终止记录 ID Level Effective Date ExpirationDate 000012-12 2 12/01/2005 NULL 000012-12 1 12/01/

将只提取大多数当前记录。这意味着在上述场景中
Exp date-如果
null
记录仍处于活动状态。
如果大于当前时间戳,则表示其未来的exp日期,这表示仍处于活动状态。
如果小于当前时间戳,则终止。
Most current是最活跃或最新终止的记录。如果它已激活并终止,则仅显示激活。否则最后终止记录

ID    Level Effective Date  ExpirationDate
000012-12     2 12/01/2005  NULL
000012-12    1    12/01/2005  NULL
000012-12    2    12/01/2005  01/01/2009
000012-A12    2 10/01/1994  11/30/2005
000012-A12    2 01/01/1999  11/30/2005
000012-A12    2 09/01/2001  11/30/2005
000012-A12    1 12/01/2005  12/31/2007
对于相同的生效日期和生效日期,一个ID可以有两行,但有多个级别。因此,在这种情况下,我们只需要为级别1选择一条记录

ID    Level Effective Date  ExpirationDate
000012-12     2 12/01/2005  NULL
000012-12    1    12/01/2005  NULL
000012-12    2    12/01/2005  01/01/2009
000012-A12    2 10/01/1994  11/30/2005
000012-A12    2 01/01/1999  11/30/2005
000012-A12    2 09/01/2001  11/30/2005
000012-A12    1 12/01/2005  12/31/2007
因此,根据上述数据集,以下是预期输出

ID    Level Effective Date  ExpirationDate
000012-12     2 12/01/2005  NULL
000012-12    1    12/01/2005  NULL
000012-12    2    12/01/2005  01/01/2009
000012-A12    2 10/01/1994  11/30/2005
000012-A12    2 01/01/1999  11/30/2005
000012-A12    2 09/01/2001  11/30/2005
000012-A12    1 12/01/2005  12/31/2007
输出

ID    Level Effective Date  ExpirationDate
000012-12     2 12/01/2005  NULL
000012-12    1    12/01/2005  NULL
000012-12    2    12/01/2005  01/01/2009
000012-A12    2 10/01/1994  11/30/2005
000012-A12    2 01/01/1999  11/30/2005
000012-A12    2 09/01/2001  11/30/2005
000012-A12    1 12/01/2005  12/31/2007
请帮忙

ID    Level Effective Date  ExpirationDate
000012-12     2 12/01/2005  NULL
000012-12    1    12/01/2005  NULL
000012-12    2    12/01/2005  01/01/2009
000012-A12    2 10/01/1994  11/30/2005
000012-A12    2 01/01/1999  11/30/2005
000012-A12    2 09/01/2001  11/30/2005
000012-A12    1 12/01/2005  12/31/2007
托马斯。请查看以下数据集

ID    Level Effective Date  ExpirationDate
000012-12     2 12/01/2005  NULL
000012-12    1    12/01/2005  NULL
000012-12    2    12/01/2005  01/01/2009
000012-A12    2 10/01/1994  11/30/2005
000012-A12    2 01/01/1999  11/30/2005
000012-A12    2 09/01/2001  11/30/2005
000012-A12    1 12/01/2005  12/31/2007
000012-12    1   12/01/2005  NULL
000012-A12  2   12/01/2005  01/01/2009
当您运行查询时,它应该给出

ID    Level Effective Date  ExpirationDate
000012-12     2 12/01/2005  NULL
000012-12    1    12/01/2005  NULL
000012-12    2    12/01/2005  01/01/2009
000012-A12    2 10/01/1994  11/30/2005
000012-A12    2 01/01/1999  11/30/2005
000012-A12    2 09/01/2001  11/30/2005
000012-A12    1 12/01/2005  12/31/2007
000872-A24 2 09/01/2001无效

ID    Level Effective Date  ExpirationDate
000012-12     2 12/01/2005  NULL
000012-12    1    12/01/2005  NULL
000012-12    2    12/01/2005  01/01/2009
000012-A12    2 10/01/1994  11/30/2005
000012-A12    2 01/01/1999  11/30/2005
000012-A12    2 09/01/2001  11/30/2005
000012-A12    1 12/01/2005  12/31/2007
但现在它又回来了

ID    Level Effective Date  ExpirationDate
000012-12     2 12/01/2005  NULL
000012-12    1    12/01/2005  NULL
000012-12    2    12/01/2005  01/01/2009
000012-A12    2 10/01/1994  11/30/2005
000012-A12    2 01/01/1999  11/30/2005
000012-A12    2 09/01/2001  11/30/2005
000012-A12    1 12/01/2005  12/31/2007
000872-A24 1 01/01/2003 12/31/2007

ID    Level Effective Date  ExpirationDate
000012-12     2 12/01/2005  NULL
000012-12    1    12/01/2005  NULL
000012-12    2    12/01/2005  01/01/2009
000012-A12    2 10/01/1994  11/30/2005
000012-A12    2 01/01/1999  11/30/2005
000012-A12    2 09/01/2001  11/30/2005
000012-A12    1 12/01/2005  12/31/2007

在不了解数据库产品的情况下,很难提供答案

ID    Level Effective Date  ExpirationDate
000012-12     2 12/01/2005  NULL
000012-12    1    12/01/2005  NULL
000012-12    2    12/01/2005  01/01/2009
000012-A12    2 10/01/1994  11/30/2005
000012-A12    2 01/01/1999  11/30/2005
000012-A12    2 09/01/2001  11/30/2005
000012-A12    1 12/01/2005  12/31/2007
Insert #Test( Id, Level, EffectiveDate, ExpirationDate ) Values ('000872-A24',1,'1994-10-01',NULL); 
Insert #Test( Id, Level, EffectiveDate, ExpirationDate ) Values ('000872-A24',1,'1999-01-01',NULL);  
Insert #Test( Id, Level, EffectiveDate, ExpirationDate ) Values ('000872-A24',2,'2001-09-01',NULL ); 
Insert #Test( Id, Level, EffectiveDate, ExpirationDate ) Values ('000872-A24',1,'2003-01-01','2007-12-31'); 
在示例输出中,您的组合
('000012-A12',2,'12/01/2005','01/01/2009')
未显示在原始数据中

ID    Level Effective Date  ExpirationDate
000012-12     2 12/01/2005  NULL
000012-12    1    12/01/2005  NULL
000012-12    2    12/01/2005  01/01/2009
000012-A12    2 10/01/1994  11/30/2005
000012-A12    2 01/01/1999  11/30/2005
000012-A12    2 09/01/2001  11/30/2005
000012-A12    1 12/01/2005  12/31/2007

我正在使用SQLServer2005中添加的两个功能:公共表表达式和排名函数。通用表表达式
的作用类似于就地视图或查询。排名函数
行数
是真正神奇的地方。顾名思义,它返回一个按
orderby
子句排序的数字序列列表。但是,它也会重新启动每个Id值的编号(即按位划分的
分区)。通过筛选
Num=1
,我将返回“top”每个Id的值。

@sqllearner190-表中是否有主键,如自动增量或标识列?@sqllearner190-您能否在示例数据中演示需要需求列表中第2项条件的情况?这就是我的想法。因为当他们要求最新的记录时,它应该总是给出一个最新的记录。然后,这将不会对级别有任何依赖性。但是我如何选择最新的记录(基于过期日期)@sqllearner190-我们需要更多的信息来提供合理的答案。我已经发布了一个答案,其中提出了一些问题。托马斯,我刚刚得到一个关于要求的澄清。下面是场景ID级别生效日期到期日期000012-12 12/01/2005 NULL 000012-12/01/2005 NULL 000012-12 2 12/01/2005 01/01/2009 000012-A12 10/01/1994 11/30/2005 000012-A12 01/01/1999 11/30/2005 000012-A12 09/01/2001 11/30/2005 000012-A12 1 12/01/2005 12/31/2007我需要选择最新的记录在exp日期..如果为空,则选择该记录..如果我们有多条记录具有相同的生效日期和过期日期,则选择级别1。我必须这么做,因为托马斯,我只是得到了一个关于需求的澄清。下面是场景ID级别生效日期到期日期000012-12 12/01/2005 NULL 000012-12/01/2005 NULL 000012-12 2 12/01/2005 01/01/2009 000012-A12 10/01/1994 11/30/2005 000012-A12 01/01/1999 11/30/2005 000012-A12 09/01/2001 11/30/2005 000012-A12 1 12/01/2005 12/31/2007我需要选择最新的记录在exp日期..如果为空,则选择该记录..如果我们有多条记录具有相同的生效日期和过期日期,则选择级别1。我必须为所有的身份证做这些tbl@sqllearner190-你应该用修改后的样本数据更新你原来的帖子。其他问题(db版本、自动递增/标识列、用于比较的目标日期)如何?Thomas,我已经更新了要求。请帮忙。这张桌子也有标识栏。哇……你做了什么!这似乎是非常高级的SQL编程…-)。。你能稍微解释一下代码吗?@Thomas-我已经更新了我的问题。对于我在那里提供的一组值,逻辑不起作用。
ID    Level Effective Date  ExpirationDate
000012-12     2 12/01/2005  NULL
000012-12    1    12/01/2005  NULL
000012-12    2    12/01/2005  01/01/2009
000012-A12    2 10/01/1994  11/30/2005
000012-A12    2 01/01/1999  11/30/2005
000012-A12    2 09/01/2001  11/30/2005
000012-A12    1 12/01/2005  12/31/2007