2010-12-03 13 views
0

イベントの日付と3つの範囲、すなわちfrom1〜to1、from2〜to2、from3〜to3を含むMySQLデータベースを持っています
それぞれの範囲は異なる価格を持っています。つまり、from1-to1 rate1、 from2-to2 rate2、...複数の範囲の値を見つけるためのSQLクエリ

したがって、各範囲の3つの列:from、to、およびrate。

月のレートを返すクエリを検索しようとしています。その意味は、その月が入っている範囲を見つけて、その範囲のレートを返します。


ありがとう!

答えて

0

データモデルが正規化されていないようです。あなたは、追加のテーブルを作成することについての提案を考慮する必要があります。

以下は、日付が3つの範囲のいずれかにあるかどうかを確認し、一致率を返す本当に醜いクエリです。

select case 
     when date '2010-12-05' between range1_from and range1_to then range1_rate 
     when date '2010-12-05' between range2_from and range2_to then range2_rate 
     when date '2010-12-05' between range3_from and range3_to then range3_rate 
     end as rate 
    from events 
where date '2010-12-05' between range1_from and range1_to 
    or date '2010-12-05' between range2_from and range2_to 
    or date '2010-12-05' between range3_from and range3_to; 
+0

ありがとうございました。 「正規化されていない」とはどういう意味ですか? "date"キーワードは何をしていますか? –

+0

dateキーワードは日付リテラルを指定する方法です。この文字列が日付として扱われることをデータベースに伝えます。 – Ronnis

2

範囲のためだけに余分な表を作成すると、スキーマを通常の形に保つことができ、適切な比率を簡単に選択できます:TABLE range、COLUMNS from、to、rate。オリジナルのテーブルに外部キーをリンクしています。次に、 '日付'> =からAND '日付' < =までの範囲からSELECT FROM範囲を選択できます。

関連する問題