有一个表用于记录来自用户的呼叫:
var Bus= angular.module('Bus',[]);
Bus.controller('BusController',function($scope,$http) {
$scope.business = {}
$scope.submitMyForm=function(){
console.log($scope.business);
var q=JSON.stringify($scope.business)
console.log(q)
$
.ajax({
type : 'POST',
url : " some url",
data :JSON.stringify($scope.business),
success: function(){
alert('success');
},
error : function(e) {
console.log(e);
alert('oops!!');
},
dataType : "json",
contentType : "application/json"
});
};
});
我对SQL的了解非常有限,但我被要求创建一个查询来列出10个最常用的手机,并按类型(OMG!)分隔它们的持续时间(以秒为单位)。像这样:
users:
- Id INT 11
- Name VARCHAR 30
calls:
- Id INT 11
- UserId INT 11
- DateBgn DATETIME
- DateEnd DATETIME
- Number VARCHAR 30
- Type TYNYINT 1
Type: 1-Incoming call / 2-Outgoing call
已经可以在几秒钟内获得通话时间:
Phone Type1 Type2
000-0000 350 210
111-1111 300 150
222-2222 300 140
333-3333 230 200
这是我到目前为止所得到的:
TIME_TO_SEC(TIMEDIFF(DateEnd, DateBgn))
这个SQL上面列出了我最常用的十大电话号码,但只有来电(type = 1)。请问,如何列出两种分开的类型?
谢谢!
编辑:
我创建了一个SQL小提琴,以便更好地理解和测试: http://sqlfiddle.com/#!9/aaf9b4/1
答案 0 :(得分:0)
使用条件聚合
SELECT
Phone,
SUM(case when Type = 1 then TIME_TO_SEC(TIMEDIFF(End, Start)) else 0 end) AS Duration1,
SUM(case when Type = 2 then TIME_TO_SEC(TIMEDIFF(End, Start)) else 0 end) AS Duration2
FROM
calls
WHERE
UserId = 10
GROUP BY
Phone
ORDER BY
SUM(TIME_TO_SEC(TIMEDIFF(End, Start))) DESC
LIMIT 10;