Oracle / SQL - Группировка элементов по действиям по дням и по времени - PullRequest
13 голосов
/ 20 мая 2011

Привет всем, у меня есть таблица «виджетов», которая имеет следующие столбцы: виджет, действие, 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

OR

Отображение каждого виджета вместе с датой, когда он был отклонен более одного раза и сколько раз. Пример ..

widget      date            count
---------------------------------
type1       2011-05-10      3
type1       2011-05-11      2
type2       2011-05-12      2

Вероятно, это будет предпочтительный вывод ... но как?

Заранее спасибо!

Ответы [ 2 ]

13 голосов
/ 20 мая 2011

Это даст ваш вывод:

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;

Конечно, вы захотите заменить переменные даты.

0 голосов
/ 20 мая 2011

Попробуйте приведенный ниже вариант, и вы получите то, что хотите: -

  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
...