【发布时间】:2013-05-12 10:46:53
【问题描述】:
我对 SQL 不是很熟悉,我希望这里的一些专家可以向我展示我想要实现的合适且高效的查询。顺便说一句,我正在使用 DB2。
以下是示例数据的屏幕截图。我需要的是对于给定的年份,选择具有不同 ID1+ID2+Name 列和最大(最近)有效日期(以 YYYYMMDD 格式,存储为整数)的记录,上述年份介于 YearFrom 和 YearTo 范围之间。
对于看不到屏幕截图的任何人:
NAME YearFrom YearTo ID1 ID2 EffDate
item1 2002 2005 AB 10 20091201
item1 2009 2013 AB 10 20100301
item2 2001 2004 XX 20 20050103
item2 2002 2009 XX 20 20060710
item2 2007 2013 XX 20 20090912
item3 2005 2010 YY 30 20110304
我希望我解释得很好。例如,如果用户正在寻找 2011 年的可用项目,则将返回项目 1(有效期为 20100301)和项目 2(有效期为 20090912)。
如果有人正在寻找 2008 年可用的项目:项目 2(生效日期为 20090912)和项目 3 将被退回。在这种情况下,项目 1 将不会被退回,因为项目 1 的最新记录的范围是 2009-2013。
我认为我查询的第一部分是正确的,但我不知道如何在一个查询中根据年份从该结果中选择有效记录。
select name,id1,id2,max(effdate)
from [table]
group by name,id1,id2
任何帮助将不胜感激。
【问题讨论】:
-
截图不可用..请提供给定示例的示例数据..
-
抱歉,虽然屏幕截图是可见的。我现在已经编辑以包含示例数据。
-
您的表的名称是什么?编辑:没关系,我以为我在看两张不同的桌子。
-
文本形式的样本数据将总是比屏幕截图为您提供更多答案。感谢您加入。
-
您的 DB2 在什么操作系统上运行?