私はテーブルを持っています、それは次のようになります:
id year effective price
1 2000 2012-01-01 1000
2 2001 2012-01-01 1100
3 2002 2012-01-01 1200
4 2003 2012-01-01 1300
5 2000 2012-03-01 1500
6 2001 2012-03-01 1600
7 2002 2012-03-01 1700
8 2003 2012-03-01 1800
9 2000 2011-12-01 900
10 2001 2011-12-01 1000
11 2002 2011-12-01 1100
12 2003 2011-12-01 1200
このテーブルには、多数のアイテムの価格履歴を含む一連のデータがあります。それらは決して規則的な順序ではなく、人々がランダムにデータベースにアクセスして変更を加えたようです。私はこのデータベースをセットアップしていませんし、データを挿入および更新するアプリケーションも開発していません。私の唯一の目的は、指定されたデータをクライアントが望む方法で提示することです。
そうは言っても、必要な情報を得るのに苦労しています。上記の例のデータでは、価格を並べ替えて、特定の年ごとに個別の数値を取得できる必要があります。これは、エンド ユーザーが入力した最新の発効日でフィルタリングする必要があります。
たとえば、ユーザーが最新のデータ (今日の日付) を求めている場合、応答は次のようになります。
5 2000 2012-03-01 1500
6 2001 2012-03-01 1600
7 2002 2012-03-01 1700
8 2003 2012-03-01 1800
一方、ユーザーが 2012 年 2 月 1 日時点の最新データが必要な場合は、次のように返されます。
1 2000 2012-01-01 1000
2 2001 2012-01-01 1100
3 2002 2012-01-01 1200
4 2003 2012-01-01 1300
私の問題は、このクエリの作成方法がわからないことにあります。これを単一のクエリとして作成することは可能ですか?それとも、データを取得するために複数のクエリを実行する必要がありますか? 年を共有しているが他の異なるデータを持つ4つの異なるテーブルからデータを取得する必要があるため、フットプリントをできるだけ小さくしたいと思います。
このクエリを試してみましたが、効果がありませんでした:
select id, year, effective, price
from mytable
group by year
having effective < '2012-02-01'
これにより、次の結果が得られます。
1 2000 2012-01-01 1000
2 2001 2012-01-01 1100
3 2002 2012-01-01 1200
4 2003 2012-01-01 1300
論理的に思えるので、これで正しい情報が得られると思っていたでしょう。
私はこのクエリを試しましたが、効果もありませんでした:
select distinct year, id, effective, price
from mytable
group by effective
having effective < '2012-02-01'
この結果を返します:
1 2000 2012-01-01 1000
5 2000 2012-03-01 1500
9 2000 2011-12-01 900
このクエリは完全に間違っているようです。
これを取得してクエリを正しく実行する方法に関する提案はありますか?