【问题标题】:Oracle/SQL - Grouping items by action by day over timeOracle/SQL - 按时间按操作对项目进行分组
【发布时间】:2011-08-29 08:28:51
【问题描述】:

大家好,我有一个“小部件”表,其中包含以下列:小部件、操作、时间戳_。我们想要做的是在某些日期之间每天拉出所有被拒绝多次的小部件。所以这里有一个示例表

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

这可能是首选输出...但是如何?

提前致谢!

【问题讨论】:

    标签: sql group-by oracle9i


    【解决方案1】:

    试试下面的,你会得到你想要的:-

      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
    

    【讨论】:

    • 我在 action = 'rejected' 上添加了 where 子句,这样我就不会得到不需要的结果。我也收到一个错误:'missing expression'
    • 你是在 sql Server 还是 Oracle 中尝试??
    【解决方案2】:

    这会给你的输出:

    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;
    

    当然,您需要替换日期变量。

    【讨论】:

    • 替换了日期变量并收到此错误:“CNT”:无效标识符
    • @dscl:抱歉,我无法针对 Oracle 数据库进行尝试。请立即尝试。
    • 不用担心;但是现在我得到了同样的错误,但日期_。 “DATE_”:无效标识符
    • @dscl:原来 Oracle 只能在其ORDER BY 子句中处理列别名。真可惜。我为你更新了查询。
    • 需要在 to_date 中交换格式和日期字符串才能使其正常工作。
    猜你喜欢
    • 2010-09-30
    • 2016-09-21
    • 2013-03-12
    • 1970-01-01
    • 2016-05-04
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 2016-04-02
    相关资源
    最近更新 更多