2013-03-21 4 views
1

У меня есть таблица, в которой хранятся данные о пользователях, которые посещают систему. Когда пользователь просматривает систему, я сохраняю их местоположение, имя пользователя, дату и время в базе данных Oracle 11g. Моя таблица выглядит следующим образом:Количество минут между первым и последним кортежем и группой по имени пользователя

username date   time   location 

    user1  YYYY-MM-DD HH24:MI:SS  kitchen 
    user2  YYYY-MM-DD HH24:MI:SS  bathroom 

Мне нужна запрос, который будет вычислять минуты между первыми и последними логами каждого дня, для каждого конкретного пользователя. Как можно это сделать?

+1

Каковы типы данных даты и времени? –

ответ

0

Если предположить, что date и time являются varchar2,
Try:

with t as 
(
    select username, "date", to_date("date"||time, 'YYYY-MM-DDHH24:MI:SS') dt 
    from your_table 
) 
select username, "date", (max(dt)- min(dt)) * 1440 
from t 
group by username, "date" 

Here is a sqlfiddle demo

+0

Это не так. Они оба указаны в формате, описанном выше. Дата: ГГГГ-ММ-ДД и время: HH24: MI: SS – junkystu

+0

Но я вижу вашу идею, и я получил ее работу, спасибо! – junkystu

+0

@junkystu, 'date' in oracle - это число, представляющее дату + время, когда у него нет формата ... –

0

Группа по имени пользователя, max + min по дате? (Вы, вероятно, нужно будет сочетать с dense rank

Что-то вроде (псевдо-код)

SELECT . . . 
FROM 
(SELECT 
select *, 
-- dates 
    DENSE_RANK() OVER (PARTITION BY TRUNC(date) ORDER BY date DESC) AS rank 
       FROM 
        your_table 
) 
) t1 
WHERE RANK = 1  
group by 
+0

Мне нужно для расчета минут между первым и последним логами каждого дня для каждого конкретного имени пользователя. Так что это не сработает. Спасибо – junkystu

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