0

我在 MS SQL 上工作。任何人都知道如何导出 Continuous_d 列?连续的天数应该完全基于 ENTER_DT 而不管时间。如果一个员工在同一天多次进入,它仍然被计算为连续一天。

PASS_M|  ENTER_DT................|CONSECUTIVE_D
Boo K K    5/1/2012 11:55:00 PM       1  
Boo K K    5/2/2012 11:30:00 PM       2  
Boo K K    5/4/2012 10:30:00 AM       1  
LIAW S     4/30/2012 11:48:52 PM      1  
LIAW S     5/1/2012 00:11:07 AM       2  
LIAW S     5/1/2012 12:32:07 AM       2  
LIAW S     5/1/2012 4:42:02 AM        2    
LIAW S     5/2/2012 1:10:09 AM        3  
LIAW S     5/2/2012 1:43:06 AM        3   
LIAW S     5/4/2012 2:17:47 AM        1   

更新:这是我尝试过的:

SELECT PASS_M, ENTRY_DT, DATEDIFF(D, MIN(ENTRY_DT) OVER (PARTITION BY PASS_M), ENTRY_DT) + 1 AS CONSECTUTIVE_DAYS
INTO         TEMP_TARGET
FROM         TEMP_5
ORDER BY PASS_M, ENTRY_DT;
4

2 回答 2

1

我会截断日期,trunc_date(enter_dt)然后使用 GROUP BY 或 PARTITION BY 计算重复值。

编辑:对于 SQL Server,正如 Aaron 提到的,使用cast(getDate() As Date)note trunc_date。在撰写本文时,这个人的接受率为 33%,所以我不想想太多。:)

于 2012-12-12T03:11:05.067 回答
1

利用

SELECT *, CONVERT(DATE,GETDATE()) AS DateOnly, SUM(CONSECUTIVE_D) as CONSECUTIVE_SUM GROUP BY DateOnly;

这允许您通过从日期时间中提取元素来按日期对元素进行分组,然后总和CONSECUTIVE_D将是CONSECUTIVE_SUM


我希望这就是你要找的:)

您可以从此构建自己的自定义查询!
请求更新

SELECT
PASS_M, 
ENTRY_DT, 
(DATEDIFF(D, MIN(ENTRY_DT) OVER (PARTITION BY PASS_M), ENTRY_DT) + 1) AS CONSECTUTIVE_DAYS,
CONVERT(DATE,ENTRY_DT) AS DateOnly,
SUM(CONSECUTIVE_DAYS) as CONSECUTIVE_SUM

INTO         TEMP_TARGET
FROM         TEMP_5
GROUP BY DateOnly
ORDER BY PASS_M;


在我看来,这应该可以解决问题!不要 ORDER BY ENTRY_DT,你现在想要 GROUP BY DateOnly

这是有关如何将日期时间转换为日期的链接:)

于 2012-12-12T03:09:08.093 回答