Нужна помощь для решения запроса (с использованием datepart) - PullRequest
0 голосов
/ 06 декабря 2009
SELECT
  -- Subtract minute, second, millisecond part of date, effectively rounding to floor of the hour
  -- For example '2017-03-17T14:31:25.567' becomes '2017-03-17T14:00:00.000'
  DATEADD(
    mi, -1 * (DATEPART(mi, tab.logindt) % 60),
    DATEADD(
      ss, -1 * (DATEPART(ss, tab.logindt)),
      DATEADD(
        ms, -1 * (DATEPART(ms, tab.logindt)),
        tab.logindt
  )))      AS "Date",
  COUNT(*) AS "Count"
FROM TableName tab
WHERE
  tab.logindt BETWEEN 'Dec 1 2009 12:00 AM' AND 'Dec 2 2009 23:59 PM'            
GROUP BY
  DATEADD(
    mi, -1 * (DATEPART(mi, tab.logindt) % 60),
    DATEADD(
      ss, -1 * (DATEPART(ss, tab.logindt)),
      DATEADD(
        ms, -1 * (DATEPART(ms, tab.logindt)),
        tab.logindt
  )))

У нас есть приложение, в которое входит несколько человек, проблема в том, что я хочу сделать запрос, с помощью которого я могу подсчитать количество людей, вошедших в систему в определенное время, скажем, 10:00 / 11/12/14. .

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

Например, приведенный выше запрос возвращает 10 человек, подписавших / вышедших из системы в 10 часов утра, но он не показывает мне людей, которые в данный момент используют систему.

1 Ответ

0 голосов
/ 06 декабря 2009

Найти все события входа в систему / выхода из системы до 10:00 и отфильтровать их так, чтобы max (вход в систему)> max (выход из системы).

SELECT COUNT * FROM 
(SELECT *
FROM Table
WHERE login < 10am //your date function here!
and logout < 10am ) a
GROUP BY a.USER
HAVING MAX(a.login) > MAX(a.logout)

Может быть, что-то подобное?

...