如何获取给定日期落在PostgreSql中相同列的日期集之间的记录

时间:2016-03-30 11:54:58

标签: postgresql date

我有一张有旅游细节的桌子,即。 empcode,tourId,旅游地点和旅游日期我想查看某个特定日期的旅游人员?

员工X正在2016年1月1日至2016年10月1日期间巡回演出 员工Y将于2016年1月7日至2016年1月12日期间参观 员工X将于2016年1月12日至2016年1月15日期间参观

表格中有以下详细信息

EmpCode TourId PlaceFrom PlaceTo TourDate
100       1       delhi   jaipur  01-01-2016
100       1       jaipur  mumbai  05-01-2016
100       1       mumbai  delhi   10-01-2016
101       2       delhi   pune    07-01-2016
101       2       pune    delhi   12-01-2016
100       3       alwar   jaipur  12-01-2016
100       3       jaipur  udaipur 13-01-2016
100       3       udaipur alwar   15-01-2016

TourId表示独特的旅行 如果我在2016年1月1日搜索谁正在巡回演出,它应该返回100
如果我在08-01-2016搜索谁正在巡回演出,它应该返回100和101
如果我在12-01-2016搜索谁正在巡回演出,它应该返回102
如果我在2016年1月14日搜索谁正在巡回演出,那么它应该返回100

如何在postgresql中的单个查询中获取所需的输出。 提前谢谢。

2 个答案:

答案 0 :(得分:1)

您可以使用聚合函数:

select EmpCode, TourId
from t
group by EmpCode, TourId
having '2016-01-01' between min(TourDate) and max(TourDate);

TourIdselect中是可选的。

答案 1 :(得分:0)

SELECT EmpCode
FROM TourDetails
GROUP BY EmpCode
HAVING '2016-01-14' BETWEEN MIN(TourDate) AND MAX(TourDate);

EmpCode很可能不应出现在该表中,而是出现在上层的Tours表中。 另外,请考虑将ISO 8601用于日期或TIMESTAMP字段。