快速查看并再次找不到我的问题。所以我希望有人可以提供帮助。 我有一张大桌子,下面有类似的结构。
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查询获得所需结果的方法,我将非常感激。
非常感谢提前
艾伦
答案 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。