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 =

这里的新手

我被设置为在SQL Server 2012数据库上报告上一个日历月的数据的挑战,但时间戳是按历元时间设置的。要将我上个月写的查询引用到上个月,这有点困难

任何帮助都会很好

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
以及为什么您确实不想在
之间使用
、区域格式,以及日期/时间和
按顺序的速记:


不要给出代码的图像,请立即修改不要给出代码的图像,请立即修改如果我想手动运行它,这很好。。但是,由于我声明了from和to date变量,因此它可以在不逐月修改代码的情况下运行。。基本上,它是作为SQL server上的每月任务运行的,以获取上一个日历月的统计数据,我已成功地将标准日期/时间格式作为脚本/批处理文件运行,但遇到了epoch问题。@AndrewLewis这似乎是另一个问题(我是按照你给我们看的代码建模的,而不是像每月任务这样的附加任务)。不管你如何定义开始日期和结束日期,重要的是将它们转换为历元偏移量,而不是试图将日期/时间逻辑应用于表中的整数。让我试试!!我会回来找你的:)谢谢如果我想手动运行它,那很好。。但是,由于我声明了from和to date变量,因此它可以在不逐月修改代码的情况下运行。。基本上,它是作为SQL server上的每月任务运行的,以获取上一个日历月的统计数据,我已成功地将标准日期/时间格式作为脚本/批处理文件运行,但遇到了epoch问题。@AndrewLewis这似乎是另一个问题(我是按照你给我们看的代码建模的,而不是像每月任务这样的附加任务)。不管你如何定义开始日期和结束日期,重要的是将它们转换为历元偏移量,而不是试图将日期/时间逻辑应用于表中的整数。让我试试!!我会回来找你的:)谢谢