1

我正在寻找一个简单的查询,将一个月包含在 2 个月内。我解释:

我有一张桌子

id | month1 | month2

比意味着 id 从月 1 到月 2 都可以(这些字段是月数)。例如:

145 | 8 | 2

意思是:id 2 从 8 月到 2 月都可以

现在我正在寻找一个简单的查询来在我选择一个月时选择 id。例如:

对于 3 月(所以第 3 个月),涉及哪个 ID?

我用大量的 AND 和 OR 进行了一些很长的查询,但它非常复杂,我相信有一种简单的方法可以得到它。困难在于 12 月后 X 月和另一个月之间的 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一个月是否小于第二个月,在这种情况下很容易:您只需测试给定的数字在month1和之间month2。如果不是,您应该提供两个选项:您的选择大于month1,因此它应该始终返回 true;或者它小于month1,但在这种情况下它应该大于或等于month2

于 2013-10-21T10:45:46.647 回答
0

以下查询将输出两个月内的所有行。

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

于 2013-10-21T10:34:44.090 回答