2013-07-23 2 views
3

мне нужно принести записи из sqlserver2008r2, мой запрос для выборки записей для текущей недели:как написать запрос для выборки на прошлой неделе записи

select EmpCode,EventDate1 as EventDate,InTime, 
case when OutTime is null then 'N/A' else Outtime end as OutTime from  
TMS_HOURCALC WHERE intime1 
    BETWEEN dateadd(dd,(datediff(DD,-53684,getdate())/7)*7,-53684) 
    AND dateadd(dd,((datediff(dd,-53684,getdate())/7)*7)+7,-53684) 
    and empcode = @empcode 
GROUP BY EmpCode, InTime,OutTime, EventDate1,intime1  
order by intime1; 

Любой, пожалуйста, помогите мне, чтобы принести записи на прошлой неделе только последний воскресенье в последнюю субботу.

ответ

2

Выполнение вычислений на колонке и отсылая к нему в ИНЕКЕ , даст ужасное представление. Это гораздо лучший подход:

select EmpCode,EventDate1 as EventDate,InTime, 
case when OutTime is null then 'N/A' else Outtime end as OutTime from  
TMS_HOURCALC 
WHERE intime1 >= dateadd(dd,(datediff(DD,-1,getdate())/7)*7-7,-1) 
and intime1 < dateadd(dd,((datediff(dd,-1,getdate())/7)*7),-1) 
and empcode = @empcode 
GROUP BY EmpCode, InTime,OutTime, EventDate1,intime1  
order by intime1; 
+1

На самом деле у меня были некоторые проблемы с производительностью! Благодарим за ваше предложение – Hearty

1

Убедитесь в вашей БД @@DateFirst установлен на 7 (воскресенье по умолчанию) и использовать DATEPART()

Попробуйте использовать:

where 
DATEPART(ww, intime1) = DATEPART(ww, GetDate()) 
and 
YEAR(intime1) = YEAR(GetDate()) 
+0

Большое спасибо! – Hearty

+0

это даст проблемы с производительностью и проблемы, связанные с изменением года (если описание верное - с воскресенья до субботы) –

Смежные вопросы