需求:
有乙個職員歷史表,表裡有職員考勤組,生效開始日期,生效結束日期,然後我要取出指定時間段的考勤組。ps:每條歷史記錄的生效開始日期都會對應乙個考勤組,也就是從生效開始日期開始使用對應的考勤組進行計算考勤,比如有如下幾條資料:
考勤組 生效開始日期 生效結束日期
a 2015-06-09
2017-01-10
b 2016-01-11
2017-07-03
c2017-07-04
2017-07-15
d2017-07-16
2999-12-31
方案1:
然後現在我要通過sql得出2017-07月這段時間每天的考勤組。根據表中的資料可以得出2017-07-01至2017-07-03是b考勤組,2017-07-04至2017-07-15是c考勤組,2017-07-16至2017-07-31是d考勤組。
所以sql語句就應該先根據生效開始日期得出處於2017-07-01至2017-07-31之間的考勤組,再union得出離2017-07-01最近的一次生效日期的考勤組。
select * from employeeshifthistory where feffectivestartdate between '2017-07-01'
and'2017-07-31'
union
select top 1 * from employeeshifthistory where feffectivestartdate < '2017-07-01'
order
by feffectivestartdate desc;
然後再關聯日期表(存了每天的日期、星期)就可以得出每天的考勤組了。
方案2:
直接得出生效結束日期 >= 『2017-07-01』 並且生效開始日期 <= 『2017-07-31』的值
select * from employeeshifthistory where feffectiveenddate >= '2017-07-01'
and feffectivestartdate <= '2017-07-31' ;
這樣就不用union了,而且sql也更簡潔。 Sql中,按時間段取資料(時間段不包括日期)
select count kqres res from t kqresult where staff id 24 and kqres res 年假說明 and kqres date 2007 10 01 and kqres date 2007 10 31 and t kqexplain.kqe st...
SQL時間段查詢
access的話 select from table where date1 2008 1 20 and date2 2007 8 30 mysql的話 select from table where date1 2008 1 20 and date2 2007 3 30 也可以 select fr...
SQL時間段查詢
sql時間段查詢 access的話 select from table where date1 2008 1 20 and date2 2007 8 30 mysql的話 select from table where date1 2008 1 20 and date2 2007 3 30 也可以 ...