2016-09-22 105 views
1

给定一个(样品)表是这样的:基于另一列选择范围

PERIOD ORD DATA... 
Dec16 1 
Sep16 3 
Aug16 4 
Jul16 5 
Jun16 7 
May16 8 
Apr16 9 
Mar16 11 
Feb16 12 
Jan16 13 
Dec15 15 
Nov15 16 
Oct15 17 
Sep15 19 
Aug15 20 
Jul15 21 
Jun15 23 
May15 24 
Apr15 25 
Mar15 27 
Feb15 28 
Jan15 29 

其中PERIOD是一个字符串,我将如何查询给定的时间段之间的所有行例如PERIOD ='Mar16'和'Jun15'之间(含)。有什么方法利用SQL查询中的ORD列来获取值的范围?

+0

请标记与您正在使用的数据库你的问题。 –

+0

有问题的数据库是netezza – geofrey

+0

我也学到了一些东西。我以前从来没有听说过netezza .... –

回答

2

Aternative戈登,这可能会实现取决于您的RDBMS

SELECT * 
FROM thetable 
WHERE ORD BETWEEN (SELECT ORD FROM thetable WHERE PERIOD ='Mar16') 
       AND (SELECT ORD FROM thetable WHERE PERIOD ='Jun15') 
+0

工作!谢谢! – geofrey

0

您会将期间转换为日期并用于比较。例如,有些数据库支持to_date(),它看起来像:

where to_date(period, 'MonYY') between to_date('Jun15', 'MonYY') and to_date('Mar16', 'MonYY') 

注意你的周期转换为日期的特定功能的数据库不同,对问题的规定这是不(没?)。但是这给你一个如何去做的想法。

而且,如果您打算将句点存储为字符串,则应该使用YYYY-MM格式。这种排序正确,并允许您使用不等式比较。

+0

可能是有用的,如果它只有几个月,但在我的情况下,我们也有四分之一周期值例如'1Q16'可能无法使用toDate功能 – geofrey