优化SQL查询的where子句

时间:2017-07-10 22:19:07

标签: sql where-clause between

我有一个SQL查询,其中有where条件

WHERE
  quarter IN ('2015 Q1', '2014 Q4', '2015 Q2', '2015 Q3', '2015 Q4',
              '2016 Q1', '2016 Q2', '2016 Q3', '2016 Q4', '2017 Q1',
              '2017 Q2', '2017 Q3')

每个季度我都会对上一季度进行硬编码。是否有一种优化的写作方式?

5 个答案:

答案 0 :(得分:1)

我认为这应该有效(不确定 - 应该是 - 更快):

WHERE
  quarter >= '2014 Q4' and quarter <= '2017 Q3'

但是,理想情况下,您的表应该有两个字段:year(int),quarter(int:1,2,3,4)

答案 1 :(得分:0)

创建一个用于存储(有效)区域的表格,例如

create table quarters (
   quarter varchar2(20) primary key
);

然后在那里插入有效的宿舍:

insert into quarters(quarter) values ('2015 Q1');
...
insert into quarters(quarter) values ('2017 Q3');

这样你就可以写:

select *
from myTable m join quarter q on m.quarter = q.quarter

因此,您不必每次都更改查询,只需在quarters - 表中插入新元组。

答案 2 :(得分:0)

我认为这可以满足您的需求:

WHERE quarter >= '2014 Q4'

这假设您没有未来的季度或其他字符串。如果你有其他字符串,那么:

WHERE quarter >= '2014 Q4' AND quarter LIKE '____ Q_'

答案 3 :(得分:0)

您可以为每一行提供自动递增* ID,因此您可以编写where ID > 0

使用ID是执行此操作的标准方法,但不是唯一的方法。

如果您在此表中有其他内容,请不要自动增加,尽管您应该只有四分之一。

答案 4 :(得分:0)

这应该可以解决问题:

 where quarter between '2014 Q4' and '2017 Q3';

您可以更改介于两者之间的条件以查看所需的结果。