选择查询 - 获取两个年龄最小和最大年龄之间的所有数据

时间:2016-08-12 09:10:02

标签: mysql

为我刻字燃烧查询。 我想获取两个年龄条件之间的所有记录。任何人请帮助我。我的查询写在下面

SELECT tbl_trip.* FROM tbl_trip  WHERE  ((tbl_trip.minage >= '15' AND tbl_trip.maxage <= '15') OR (tbl_trip.maxage <= '28' AND tbl_trip.minage >= '28')) 

在这个查询中,我想要来自数据库的所有记录..年龄介于15到28之间。在这个所有的reords得到,例如最小到最大值:1到16,12到30,16到24,27到28但不能达到3到13或29或100。提前谢谢。

4 个答案:

答案 0 :(得分:3)

这是Rohit写一个令人困惑的查询的正确方法。

select * from tbl_trip where ((minage>=12 and minage<=22) or (maxage>=12 and maxage<=22)) or ((minage<=12 and maxage>=22))

由于

答案 1 :(得分:2)

据我所知,您需要从DB获取所有记录,其中minage - maxage range与给定的记录相交。在下文中,给定范围将从X到Y,行的范围将从A到B.显然,Y> X,B>甲

这些范围有三种情况交叉:

  • A - B完全在X - Y内。这意味着在数字线上这些数字是这样的:A,X - Y,B。因此,条件是

      

    A&lt; = X B&gt; = Y

  • A - B与X - Y的左侧侧的X - Y重叠。在数字线上,这些数字看起来像:A,X,B,Y。因此,条件是

      

    A&lt; = X X&lt; = B B&lt; = Y   

  • A-B在右侧侧跨越X-Y范围相同。数字行:X,A,Y,B。条件:

      

    X&lt; = A A&lt; = Y Y&lt; = B   

  •   总之,最终条件是:

         

    (A&lt; = X&amp; B&gt; = Y)|| (A <= X&amp;&amp; X&lt; = B&amp;&amp; B&lt; = Y)|| (X&lt; = A&amp;&amp; A&lt; = Y&amp;&amp; Y&lt; = B)

    答案 2 :(得分:2)

    尝试使用它,它对我来说很好用

    select * from tbl_trip
    Where GREATEST(GREATEST(minage,12)-LEAST(maxage,22),0)=0
    

    答案 3 :(得分:1)

    此查询检查您在minage和maxage之间的给定范围,反之亦然。

    select * from tbl_trip 
    where (((minage>=15 and minage<=22) or (maxage>=15 and maxage<=22))
    or((15>=minage and 15<=maxage) or (22<=maxage and 22>=minage)))
    

    这也有效,请在使用前正确检查:

    select * from tbl_trip 
    where ((minage>=12 and minage<=22) or (maxage>=12 and maxage<=22))
           or ((12>=minage and 22<=maxage))
    

    以下是另一种方式

    select * from tbl_trip
    Where GREATEST(GREATEST(minage,12)-LEAST(maxage,22),0)=0