私は 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 の最新のレコードの範囲が 2009 ~ 2013 であるため、この場合、アイテム 1 は返されません。
クエリの最初の部分は正しいと思いますが、1 つのクエリで年に基づいてその結果から有効なレコードを選択する方法がわかりません。
select name,id1,id2,max(effdate)
from [table]
group by name,id1,id2
どんな助けでも大歓迎です。