2015-01-25 5 views
0

его мой первый вопрос здесь заблаговременно за помощь. У меня есть две таблицы работников и вращение, где хранятся данные из посещаемости, замещения и т. Д. У каждого работника есть запись того, что было в этот день (обычная посещаемость, временная поддержка для замещения или необоснованного отсутствия). Я хочу знать, что был последним статус группы работника, не включая сегодня (зная, что может или не может есть записи сегодня) я стараюсь это:Проблема с SELECT MAX (DATE) GROUP BY WHERE SPECIFIC DATE

SELECT a.id_worker,MAX(b.datetime_event) 
FROM workers a INNER JOIN rotation b ON a.id_worker=b.id_worker 
WHERE b.status_confirm=1 
GROUP BY a.id_worker 
HAVING MAX(b.datetime_event) < DATEADD(dd,DATEDIFF(dd,0,GETDATE()),0) --Today '00:00' 

, когда я стереть ИМЕЯ работу Clause, но только если оленья кожа существовать запись сегодня, конечно ,

Im с помощью SQL Server 2008

ответ

1

Having заявления применять правила к элементам после того как они находятся в группах; вы хотите применить фильтр до того, как элементы сгруппированы. то есть то, что вы выше, вернет все группы, для которых последняя дата не существует сегодня (подмножество групп); то, что ниже, вернет все группы с последней датой до сегодняшнего дня (только подмножество групп, если единственные записи для группы - сегодня или позже).

SELECT a.id_worker,MAX(b.datetime_event) 
FROM workers a INNER JOIN rotation b ON a.id_worker=b.id_worker 
WHERE b.status_confirm=1 
and b.datetime_event < cast(cast(GETDATE() as date) as datetime) --Today '00:00' 
GROUP BY a.id_worker 
+1

ОК спасибо за повторную передачу так быстро, я неправильно понял группу, и я так похоронил себя, глядя на неправильную часть на внутреннее соединение или группу. Большое спасибо! –