我有一张有旅游细节的桌子,即。 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中的单个查询中获取所需的输出。 提前谢谢。
答案 0 :(得分:1)
您可以使用聚合函数:
select EmpCode, TourId
from t
group by EmpCode, TourId
having '2016-01-01' between min(TourDate) and max(TourDate);
TourId
在select
中是可选的。
答案 1 :(得分:0)
SELECT EmpCode
FROM TourDetails
GROUP BY EmpCode
HAVING '2016-01-14' BETWEEN MIN(TourDate) AND MAX(TourDate);
EmpCode很可能不应出现在该表中,而是出现在上层的Tours表中。 另外,请考虑将ISO 8601用于日期或TIMESTAMP字段。