首页 > 解决方案 > 仅显示特定时间段内的记录

问题描述

我将我的数据集组织为上午 8:00、下午 4:30 和晚上 8:30 的 3 个时间间隔/班次,如下所示:

CASE 
WHEN cast(last_update_date as time) >= '20:31' THEN '8:00' 
   WHEN cast(last_update_date as time) < '8:01' THEN 'As of 08:00' 
   WHEN cast(last_update_date as time) >= '8:01' AND cast(last_update_date as 
time) < '16:31' THEN 'As of 16:30'
 WHEN cast(last_update_date as time) >='16:31' and cast(last_update_date as 
time) < '20:31' THEN 'As of 20:30'
 END TimeInterval

我遇到的问题是我不想在尚未完成的时间间隔内显示记录。

例如,如果我在上午 8:02 运行查询,则在上午 8:01 和上午 8:02 更新的记录将放在“截至下午 4:30”组中。但是下午 4:30 还没有“过去”,所以这些记录无法显示在我的数据集中。

这也需要对白天敏感。例如,如果我在星期二上午 8:02 运行查询,我需要查看星期一发生的所有记录,然后是星期二上午 8:00 的记录,而不是之后的记录。我已经将我的数据限制为仅显示本周的数据,因此我不需要考虑前几周,只需考虑从星期一开始的那一周。

我已经能够通过检查 getdate() 的星期几并使用以下方法与我的更新日期进行比较来完成第二部分:

datepart(weekday, getdate()) today_day, datepart(weekday, last_update_date) update_day

然后在我的 where 子句中我使用

today_day <= update_day 

这将显示今天的数据以及一周的前几天

我试图用今天的时间做同样的方法:

cast(getdate()  as time) today_time

但是我无法编写案例语句来更改以与更新日期时间进行比较。IE。我不能在我的案例陈述中这样做,或者将时间戳更改为特定的时间戳,例如:

WHEN cast(last_update_date as time) >= '20:31' THEN cast('8:00' as time) 

下面是最终输出(即放入 Crytal 报告中)。在这种情况下,报告是在周四早上的某个时间运行的,我们不想在周四实际发生的下午 4:30 之前显示那些带圆圈的数字,即使用户运行报告也是如此。

下面是我的工作查询(还有很多其他的东西)

 IF OBJECT_ID('tempdb..#Final') IS NOT NULL DROP Table #Final
SELECT getdate() today_date, cast(getdate()  as time) today_time,  
datepart(weekday, getdate()) today_day, 
DateName(weekday, last_update_date) Day_of_week_name, datepart(weekday, 
last_update_date) update_day, cast(last_update_date as time) last_update_date_Time,
CASE 
    WHEN cast(last_update_date as time) >= '20:31' THEN '8:00' 
       WHEN cast(last_update_date as time) < '8:01' THEN 'As of 08:00' 
   WHEN cast(last_update_date as time) >= '8:01' AND cast(last_update_date as time) 
< '16:31' THEN 'As of 16:30'
   WHEN cast(last_update_date as time) >='16:31' and cast(last_update_date as time) 
< '20:31' THEN 'As of 20:30'
   END TimeInterval
   ,
   CASE 
    WHEN cast(last_update_date as time) >= '20:31' THEN '08:00' 
   WHEN cast(last_update_date as time) < '8:01' THEN '08:00'
   WHEN cast(last_update_date as time) >= '8:01' AND cast(last_update_date as time) 
< '16:31' THEN '16:30'
   WHEN cast(last_update_date as time) >='16:31' and cast(last_update_date as time) 
< '20:31' THEN '20:30'
   END TimeInterval2
   ,

     CASE WHEN
 requisition_status_Description  = 'Pending' THEN 'Active'
 WHEN requisition_status_Description  = 'Created' THEN 'Active'
 WHEN requisition_status_Description  = 'Requested' THEN 'Active'
 WHEN requisition_status_Description  = 'Approved' THEN 'Completed'
 WHEN requisition_status_Description  = 'Denied' THEN 'Completed'
 WHEN requisition_status_Description  = 'Cancelled' THEN 'Completed'
 END RequisitionStatus
 ,
  CASE WHEN
 cast(last_update_date as time) < '16:30' then 'Regular'
 WHEN  cast(last_update_date as time) >= '16:30'  then 'Extended Hours'
 End ShiftTime, @StartWeek StartWeek, @EndWeek EndWeek
 ,*
 FROM #DataSet

标签: sqlsql-server

解决方案


推荐阅读