1

1 か月を 2 か月に含める簡単なクエリを探しています。私は説明する:

私はテーブルを持っています

id | month1 | month2

これは、id が month1 から month2 まで (フィールドは月の数字) であることを意味します。例えば:

145 | 8 | 2

意味:id 2は8月から2月までOK

今、1 か月を選択したときに ID を選択するための簡単なクエリを探しています。例えば:

3 月 (3 番目) について、どの Id が関係していますか?

AND と OR を多数使用して非常に長いクエリを作成しましたが、非常に複雑です。簡単な方法があると確信しています。難しいのは、ある月 X と 12 月以降の別の月の間の ID です...

のようなクエリ

SELECT * FROM `table` WHERE 2 between month(month1) and month(month2)

何かアイデアはありますか?ありがとう

4

2 に答える 2

1

特定の月にアクティブなすべてのレコードを返したいとします。

SELECT *
FROM `table`
WHERE CASE WHEN month1 < month2
           THEN (month1 <= 3 AND month2 >= 3)
      ELSE (month1 <= 3)
           OR
           (month1 > 3 AND month2 >= 3)
      END CASE

上記のクエリはテストされていませんが、これらの行に沿って何かを試してみます。(私はsqlfiddleに乗ることができないようです...)

CASE最初の月が 2 番目の月よりも小さいかどうかのテスト。この場合は簡単です。指定された数値が ~ の間month1にあることをテストするだけmonth2です。そうでない場合は、2 つのオプションを指定する必要があります。選択した値が より大きい場合month1は常に true を返す必要があります。または より小さいですmonth1が、その場合は より大きいか等しい必要がありますmonth2

于 2013-10-21T10:45:46.647 に答える
0

次のクエリは、2 つの個別の月にあるすべての行を出力します。

SELECT *, COUNT(1) AS amountOfMonths FROM table GROUP BY month HAVING amountOfMonths = 2

于 2013-10-21T10:34:44.090 に答える