我有一个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')
每个季度我都会对上一季度进行硬编码。是否有一种优化的写作方式?
答案 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';
您可以更改介于两者之间的条件以查看所需的结果。