Не проверено ... но теряются значения даты, отсчитывается время между ними, используйте "конец дня" для еще вошедшего в систему.
Предполагается, что "logintime" - это дата и время. Если нет, производная таблица может быть удалена (все еще требуется ISNULL, хотя). Конечно, у SQL Server 2008 есть «время», чтобы сделать это проще.
SELECT
COUNT(*)
FROM
(
SELECT
DATEADD(day, DATEDIFF(day, logintime, 0), logintime) AS inTimeOnly,
ISNULL(DATEADD(day, DATEDIFF(day, logouttime, 0), logintime), '1900-01-01 23:59:59.997') AS outTimeOnly
FROM
mytable
) foo
WHERE
inTimeOnly >= @TheTimeOnly AND outTimeOnly <= @TheTimeOnly