另外这里的新手问题,SQL选择不正确的分组
我有以下选择:
SELECT
DATEADD(dd, 0, DATEDIFF(dd, 0, CIC.StatusDateTime)) AS ST_Date,
CIC.UserId,
MIN(CIC.StatusDateTime) as Beginning,
MAX(CIC.EndDateTime) as ending,
DATEPART(hour,MAX(CIC.EndDateTime) - MIN(CIC.StatusDateTime)) * 3600
+ DATEPART(minute, MAX(CIC.EndDateTime) - MIN(CIC.StatusDateTime)) * 60
+ DATEPART(second,MAX(CIC.EndDateTime) - MIN(CIC.StatusDateTime)) AS Login_Time,
SUM(CASE WHEN RS.AGT_STATE_GRP = 5 THEN StateDuration ELSE 0 END) AS Lunch,
SUM(CASE WHEN RS.AGT_STATE_GRP = 3 THEN StateDuration ELSE 0 END) AS Break_,
SUM(CASE WHEN RS.AGT_STATE_GRP = 4 THEN StateDuration ELSE 0 END) AS Coaching,
SUM(CASE WHEN RS.AGT_STATE_GRP = 10 THEN StateDuration ELSE 0 END) AS SYS_Down,
SUM(CASE WHEN RS.AGT_STATE_GRP = 7 THEN StateDuration ELSE 0 END) AS Training,
SUM(CASE WHEN RS.AGT_STATE_GRP = 6 THEN StateDuration ELSE 0 END) AS Meeting,
SUM(CASE WHEN RS.AGT_STATE_GRP = 11 THEN StateDuration ELSE 0 END) AS Default_
FROM dbo.CIC_AgentActivityLog_TMP AS CIC
INNER JOIN dbo.REF_AGT_STATES AS RS
ON CIC.StatusKey = RS.AGT_STATE_DESC
Where CIC.StatusDateTime >='2011-09-01'
GROUP BY CIC.StatusDateTime, CIC.UserId, CIC.EndDateTime
ORDER BY ST_Date,UserID,StatusDateTime;
利用这一点,我的成绩似乎并没有在所有分组。我想要的是带有日期,userid,firstlogin,lastlogin,totallogintime的单行,然后是一串代码,其持续时间以秒为单位。我有一个非常相似的另一个数据源工作正常。
我已经试过转换和使用与第一次日期思考最后00:00:00的演员阵容可能是冲突,但无济于事。我不确定你们可能需要的更多信息,请让我知道。 *编辑1 - 我的MIN(CIC.StatusDateTime)作为开始,MAX(CIC.EndDateTime)作为结束似乎没有帮助。对于代理商,我有三行,它们都有不同的开始和结束时间。最小和最大不会给我整天的实际最小和最大值。
这里是源数据:
userID StatusDateTime StatusKey EndDateTime StateDuration
bBarsby 9/1/2011 11:36 Out of the office 9/1/2011 11:36 0
bBarsby 9/1/2011 11:36 Out of the office 9/1/2011 11:36 5
bBarsby 9/1/2011 11:36 Available 9/1/2011 14:18 9711
bBarsby 9/1/2011 14:18 Away from desk 9/1/2011 14:39 1261
bBarsby 9/1/2011 14:39 Available 9/1/2011 19:51 18693
bBarsby 9/1/2011 19:51 Out of the office 9/1/2011 19:51 4
bBarsby 9/1/2011 19:51 Out of the office 9/1/2011 19:51 0
这是效果
ST_Date UserID Beginning Ending LoginTime Lunch Break Coaching Etc.
9/1/2011 0:00 bBarsby 9/1/2011 11:36 9/1/2011 14:18 9711 0 0 0 0
9/1/2011 0:00 bBarsby 9/1/2011 14:18 9/1/2011 14:39 1261 0 0 0 0
9/1/2011 0:00 bBarsby 9/1/2011 14:39 9/1/2011 19:51 18693 0 0 0 0
此外,您正在按StatusDateTime进行排序,但该列不在选择列表中。 –
删除它,仍然有相同的结果。 – Jessica
你能提供一些样本数据和期望的结果吗?当然,如果你使用'UserID'进行分组,那么'MIN'和'MAX'运营商不知道你想在一天之内停留。也许你的WHERE子句也应该说'''20110902'? –