web-dev-qa-db-ja.com

Oracle / SQL-時間の経過に伴う日ごとのアクションによるアイテムのグループ化

こんにちは。widget、action、timestamp_の列を持つ「widget」テーブルがあります。私たちがやりたいのは、特定の日付の間に1日に2回以上拒否されたすべてのウィジェットをプルすることです。これがテーブルの例です

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

ですから、この2つの方法のいずれかで結果を見たいと思っています。

日付xとyの間に、1日に複数回拒否された2つのウィジェットがありました

これにより、type1はtype2と同様に、1日に複数回拒否されたことがわかります。したがって、カウントは次のようになります。2

OR

各ウィジェットを、複数回拒否された日付と回数とともに表示します。例..

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

これはおそらく好ましい出力でしょう...しかしどのように?

前もって感謝します!

15
dscl

これにより、出力が得られます。

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;

もちろん、日付変数を置き換えることをお勧めします。

16
MPelletier

以下のものを試してみてください、あなたはあなたが望むものを手に入れるでしょう:-

  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
0
Sanjay