2014-12-24 2 views
-1

Мне нужно написать запрос для посещения, который дает посещаемость текущего времени и предыдущих 10 минут. Всего 20 записей. У меня есть запрос ниже. он дает мне правильные данные для текущего времени. Но предыдущее посещение продолжается. Например: в 12:30, посещаемость - 2000. Но когда время достигает 1:30 вечера, посещение, соответствующее 12:30, показывает очень мало.Запрос, чтобы получить данные в определенное время

SELECT TO_CHAR (each_sec, 'HH24:MI') p_time, COUNT (each_sec) cnt 
FROM (SELECT * 
     FROM (SELECT d.userid, d.logdate 
       FROM atendance_data d 
        JOIN 
        (SELECT userid, MAX (logdate) logdate 
          FROM atendance_data 
         WHERE TRUNC (logdate) = TRUNC (SYSDATE) 
         GROUP BY userid) m 
        ON d.userid = m.userid AND d.logdate = m.logdate 
       WHERE d.c1 NOT IN ('Check-Out', 'Break-Out')) c 
      JOIN 
      (SELECT  SYSDATE + (1 - LEVEL)/24/3600 * 600 each_sec 
        FROM DUAL 
       CONNECT BY LEVEL <= 20) s ON c.logdate <= s.each_sec 
      ) 
GROUP BY each_sec 
    ORDER BY each_sec 

Мне нужно написать, где условие, чтобы взять максимум logdate, говоря меньше, чем each_sec. Думаю, именно там я и ошибаюсь. Но я не знаю, как это сделать.

Может ли кто-нибудь помочь мне сделать это? Спасибо заранее.

+2

Опишите свою таблицу и предоставите тестовые данные. Без этого никто не сможет вам помочь. – Dmitry

+1

Каков интервал проверки времени ???? – psaraj12

ответ

0

У меня все сделано так. Благодарю всех вас за ваши ответы.

SELECT COUNT (*), each_sec 
FROM (SELECT a.userid, a.logdate, a.c1, each_sec 
     FROM atendance_data a, 
      (SELECT userid, MAX (logdate) logdate, each_sec 
        FROM (SELECT userid, logdate, c1, each_sec 
          FROM (SELECT a.USERID,A.LOGDATE,A.C1, b.each_sec 
            FROM atendance_data a 
             JOIN 
             (SELECT  SYSDATE 
                + (1 - LEVEL) 
                /24 
                /3600 
                * 600 each_sec 
               FROM DUAL 
             CONNECT BY LEVEL <= 20) b 
             ON a.logdate <= b.each_sec 
            AND trunc(a.logdate) =trunc(sysdate)                 
             )) 
       GROUP BY userid, each_sec) b 
     WHERE a.userid = b.userid 
     AND a.logdate = b.logdate 
     AND Trunc (a.logdate) = trunc(sysdate)) 
WHERE c1 NOT IN ('Check-Out', 'Break-Out') 
GROUP BY each_sec 
ORDER BY each_sec; 
Смежные вопросы