mysql按小时聚合多列

时间:2010-09-28 08:34:08

标签: sql mysql aggregate

快速查看并再次找不到我的问题。所以我希望有人可以提供帮助。 我有一张大桌子,下面有类似的结构。

DateTime | InboundUserID | OutboundUserID | CustomerUserID | Cost | Mins | Account Number

我正在尝试将上述数据分组为每小时块,并将结果存储在另一个具有类似结构的表中。

Date | HourFrom | HourTo | SumMins | SumCost | OutboundUserID | CustomerUserID | Account Number

为了做到这一点,我写了下面的代码/查询,但它并不完全正确。基本上该组通过并非所有数据都被汇总。例如,当查看新创建的表时,我拥有所有OutboundUserID数据,但没有CustomerUserID数据。

    for(int i=0;i <=23;i++)
    {
        for(int j=1 ; j <=31 ; j++)
        {
            String Time = String.format("%02d", i);

            query = "INSERT DELAYED INTO correlated_calls_hourly " +
                    " SELECT DateOnly,HourFrom,HourTo,DURATION,CALLCOUNT,`Price Group ID`,INBOUNDCOST,INBOUNDREVENUE,`InboundCustomerID`,OUTBOUNDCOST,OUTBOUNDREVENUE,`Outbound Customer ID`,`Customer ID`,`Account Number`,`Service` FROM" +
                    " ("+
                        " SELECT "+
                        /* snip sum(),case and date/time part of query */
                        " GROUP BY  DateOnly,`InboundCustomerID`,`OutboundCustomerID`,`CustomerID`,`AccountNumber`,`PriceGroupID`,`Service`" +
                    " )a ";
        }
    }

我已经采取了创建三个不同表的步骤,以便通过OutboundUserID / InboundUserID / CustomerUserID分别汇总数据。但如果我能让这一个汇总表正常工作,那将会更加优雅。

如果有人能帮助我想出通过单个SQL查询获得所需结果的方法,我将非常感激。

非常感谢提前

艾伦

2 个答案:

答案 0 :(得分:0)

这样的事情会起作用吗?

INSERT INTO correlated_calls_hourly (Date, HourFrom, HourTo, SumMins, SumCost, OutboundUserID, CustomerUserID, AccountNumber)
SELECT 
  CONVERT(varchar(8), GETDATE(), 112),
  hour(DateTime),
  hour(DateTime) + 1, 
  SUM(Mins),
  SUM(Cost),
  OutboundUserID,
  CustomerUserID,
  AccountNumber
GROUP BY
  CONVERT(varchar(8), GETDATE(), 112),
  hour(DateTime)
  OutboundUserID,
  CustomerUserID,
  AccountNumber

转换功能将日期时间转换为日期。您可能需要稍微调整一下以适应您的RDBMS,但我看不出有什么理由不起作用。

答案 1 :(得分:0)

经过一些灵感,我意识到解决方案很明显。将列连接在一起,并在连接列上进行分组。

CONCAT(InboundUserID,'',OutboundUserID,'',CustomerUserID)as uniqueKey GROUP BY uniqueKey。