Oracle/SQL - группировка элементов по дням с течением времени
Привет всем. У меня есть таблица "widget", которая имеет следующие столбцы: widget, action, timestamp_. Мы хотим, чтобы все виджеты, которые были отклонены более одного раза в день между определенными датами. Итак, вот пример таблицы
widget action timestamp_
-------------------------------------------
type1 reject 2011-05-10 08:00:00
type1 reject 2011-05-10 09:00:00
type1 reject 2011-05-10 09:30:00
type2 reject 2011-05-11 09:30:00
type3 reject 2011-05-11 09:30:00
type1 reject 2011-05-11 09:30:00
type1 reject 2011-05-11 09:30:00
type2 reject 2011-05-12 10:30:00
type2 reject 2011-05-12 12:30:00
type3 reject 2011-05-12 12:30:00
Поэтому я ожидаю увидеть результаты в одном из этих двух способов.
Между датой x и y было два виджета, которые были отброшены несколько раз за один день
Это увидит, что type1 был отклонен более одного раза в день, как и type2, поэтому счетчик: 2
ИЛИ
Отобразить каждый виджет вместе с датой, когда он был отклонен более одного раза и сколько раз. Пример..
widget date count
---------------------------------
type1 2011-05-10 3
type1 2011-05-11 2
type2 2011-05-12 2
Это, вероятно, будет предпочтительным выходом... но как?
Спасибо заранее!
Ответы
Ответ 1
Это даст вам результат:
SELECT Widget, to_char(timestamp_,'YYYY-MM-DD'), Count(Widget)
FROM Widget
WHERE timestamp_ BETWEEN to_date('YYYY-MM-DD HH24:MI:SS','%date1%') AND to_date('YYYY-MM-DD HH24:MI:SS','%date2%')
AND action LIKE 'reject'
GROUP BY Widget, to_char(timestamp_,'YYYY-MM-DD')
HAVING Count(Widget) > 1;
Конечно, вы захотите заменить переменные даты.
Ответ 2
Попробуйте ниже, и вы получите то, что хотите: -
Select widget,convert(varchar,[timestp],102) As Date,COUNT(timestp) as Count
From MTest
group by widget,[action],convert(varchar,[timestp],102)
having COUNT(timestp)>1