2016-12-29 180 views
0

我有下表。间隔日期之间的查询

enter image description here

我试图让与任何日期相交,例如记录如果我需要2002年12月29日和2002-12-30之间的百分比我应该得到与%的第一条记录28.60,我写了一个查询,但有时我会得到一些记录,但有时我什么都没有。任何帮助都会很棒。

下面是该查询

SELECT * 
FROM myTable 
WHERE ((fec_inicio < '2002-12-29' 
AND fec_fin  > '2002-12-29') 
OR (fec_inicio  < '2002-12-30' 
AND fec_fin  > '2002-12-30')) 
+0

您是否尝试过使用BETWEEN运算符? –

+1

如果你有2002-12-29和2003-10-25你想看到多少百分比?一些如何逻辑似乎不正确。你不应该只有一个日期来比较,并得到该日期的百分比? – Stephen

+0

仍在挣扎?见http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-query – Strawberry

回答

0

这听起来像你正在寻找的SQL overlaps运营商,我认为MySQL不支持。所述overlaps操作者被定义为

row_constructor overlaps row_constructor 

和行构造具有形式

(Ls, Le) OVERLAPS (Rs, Re) 

其中LS装置左手启动装置左手端,等等

overlaps运营商是defi ned在语义上等同于这个表达式。

(Ls > Rs and (Ls < Re or Le < Re)) or 
(Rs > Ls and (Rs < Le or Re < Le)) or 
(Ls = Rs and Le is not null and Re is not null) 

替换你的值给了我这样的东西。 (未测试)

select * 
from myTable 
where ('2002-12-29' > fec_inicio and ('2002-12-29' < fec_fin or '2002-12-30' < fec_fin)) or 
     (fec_inicio > '2002-12-29' and (fec_inicio < '2002-12-30' or fec_fin < '2002-12-30')) or 
     ('2002-12-29' = fec_inicio and '2002-12-30' is not null and fec_fin is not null); 

我希望我能得到那些替代权。 (并且我们知道希望不会很好地扩展。)

从您的问题中不清楚您需要如何处理重叠多行的范围。但是,例如,应该很简单,从上面的查询中选择最短日期,并在该日期选择inner join以获取完整行。

说了这么多,你选择百分比的逻辑看起来很奇怪。给它一些想法。