SQL Server 2012使用历元时间分析上月的数据
这里的新手 我被设置为在SQL Server 2012数据库上报告上一个日历月的数据的挑战,但时间戳是按历元时间设置的。要将我上个月写的查询引用到上个月,这有点困难 任何帮助都会很好SQL Server 2012使用历元时间分析上月的数据,sql,sql-server,timestamp,epoch,Sql,Sql Server,Timestamp,Epoch,这里的新手 我被设置为在SQL Server 2012数据库上报告上一个日历月的数据的挑战,但时间戳是按历元时间设置的。要将我上个月写的查询引用到上个月,这有点困难 任何帮助都会很好 DECLARE @fromDate AS DATETIME DECLARE @toDate AS DATETIME SET @fromDate = DATEADD(DAY, -1, CONVERT(SMALLDATETIME, CONVERT(DATE, GETDATE()))) SET @toDate =
DECLARE @fromDate AS DATETIME
DECLARE @toDate AS DATETIME
SET @fromDate = DATEADD(DAY, -1, CONVERT(SMALLDATETIME, CONVERT(DATE, GETDATE())))
SET @toDate = DATEADD(DAY, 0, CONVERT(SMALLDATETIME, CONVERT(DATE, GETDATE())));
SELECT
DATEADD(mi, DATEDIFF(mi, 0, cm.CREATE_DATE)/30*30,0) 'HALF_HOUR' ,
COUNT(DISTINCT cm.ACTIVITY_1D) 'ACTIVITY_COUNT' ,
SUM(cm. EVENT_DURATION) AS AGENT_EVENT_TIME,
CASE
WHEN SUM(cm.EVENT_DURATION) <== 1800
THEN 1
ELSE CEILING (SUM(cm.EVENT_DURATION)*1.0/1800)
END AS AVG_CONCURRENCY,
u.USER NAME
FROM
[dbo].[EGPL_EVENT_HISTORY_CASe_MGMT] cm
JOIN
EGPL USER u ON u.USER ID = cm.USER ID
WHERE
cm. CREATE_DATE BETWEEN @fromDate AND @toDate
AND USER NAME != ' system '
GROUP BY
DATEADD(mi, DATEDIFF(mi, 0, cm.CREATE_DATE) / 30 * 30, 0), u.USER_NAME
ORDER BY
1, 3
将@fromDate声明为DATETIME
将@toDate声明为DATETIME
SET@fromDate=DATEADD(DAY,-1,CONVERT(SMALLDATETIME,CONVERT(DATE,GETDATE()))
SET@toDate=DATEADD(DAY,0,CONVERT(SMALLDATETIME,CONVERT(DATE,GETDATE()));
挑选
DATEADD(mi,DATEDIFF(mi,0,cm.创建日期)/30*30,0)“半小时”,
计数(不同的cm.ACTIVITY_1D)‘ACTIVITY_COUNT’,
作为代理事件时间的总和(厘米事件持续时间),
案例
当总和(厘米事件持续时间)时,日期时间值存储为int
,表示自1970-01-01以来的秒数?您希望将参数/参数转换为表中的类型,而不是反过来,尤其是在该列具有索引的情况下。这假设您一次想要一个月,但很容易针对任何范围进行调整:
DECLARE @month datetime = '20190101'; -- don't use regional formats
DECLARE @start int, @end int;
SELECT @start = DATEDIFF(SECOND, '19700101', @month);
SET @end = DATEDIFF(SECOND, '19700101', DATEADD(MONTH, 1, @month));
SELECT ... FROM [dbo].[EGPL_EVENT_HISTORY_CASe_MGMT] AS cm
WHERE cm.CREATE_DATE >= @start
AND cm.CREATE_DATE < @end;
上月:
DECLARE @month datetime = DATEADD(MONTH, -1,
DATEADD(DAY,1-DAY(GETDATE()),CONVERT(date, GETDATE())));
-- everything else the same
以及为什么您确实不想在
之间使用、区域格式,以及日期/时间和
按
顺序的速记:
int
,表示自1970-01-01以来的秒数?您希望将参数/参数转换为表中的类型,而不是反过来,尤其是在该列具有索引的情况下。这假设您一次想要一个月,但很容易针对任何范围进行调整:
DECLARE @month datetime = '20190101'; -- don't use regional formats
DECLARE @start int, @end int;
SELECT @start = DATEDIFF(SECOND, '19700101', @month);
SET @end = DATEDIFF(SECOND, '19700101', DATEADD(MONTH, 1, @month));
SELECT ... FROM [dbo].[EGPL_EVENT_HISTORY_CASe_MGMT] AS cm
WHERE cm.CREATE_DATE >= @start
AND cm.CREATE_DATE < @end;
上月:
DECLARE @month datetime = DATEADD(MONTH, -1,
DATEADD(DAY,1-DAY(GETDATE()),CONVERT(date, GETDATE())));
-- everything else the same
以及为什么您确实不想在
之间使用、区域格式,以及日期/时间和
按顺序的速记: