我正在做的是检查多个日期之间的差距,如果与最后一个非重复结果之间没有 14 天的差距,则将结果称为重复结果。
冷融合中的代码如下所示:
<cfset date_check = data.date_to_check />
<cfset counted = 1 />
<cfloop query="data" >
#dateformat( date_to_check )# <br>
<cfif abs( dateDiff('d', date_check , data.date_to_check ) ) gt 14 >
<cfset counted ++ />
<cfset date_check = data.date_to_check />
Not Duplicate
<cfelseif currentrow gt 1>
Duplicate
<cfelse>
Not Duplicate
</cfif>
</cfloop>
> #counted#
例如,输出将是:
19-Jan-18 Not Duplicate
16-Jan-18 Duplicate
21-Oct-16 Not Duplicate
12-Oct-16 Duplicate
06-Oct-16 Not Duplicate
22-Sep-16 Duplicate
09-Aug-16 Not Duplicate
11-Jul-16 Not Duplicate
> 5
我尝试使用外部应用并加入距当前行 14 天的下一行。但这种方法的问题是,如果我有一个集群,它会“重置”每行的日期,如下所示:
19-Jan-18 - not duplicate
16-Jan-18 - duplicate
10-Jan-18 - will give false duplicate ( compares itself to Jan 16 instead of Jan 19 )
对此的查询是这样的:
SELECT
count(*)
FROM @item T1
OUTER APPLY (
SELECT TOP 1 *
FROM @item T2
WHERE T2.[index] < T1.[index]
ORDER BY T2.[index] DESC) T
WHERE DATEDIFF(DAY, T.[date], T1.[date]) > 14
最佳答案
我认为 EXISTS 子查询是最直接的方法。如果这还不够性能,那么您可以对其进行连接,但我发现 EXISTS 通常足够快并且更易于阅读。
SELECT ID,
Name,
Date_To_Check,
CASE
WHEN EXISTS (
SELECT 1
FROM Table1 b
WHERE b.Date_To_Check < a.Date_To_Check
AND DATEDIFF(d,b.Date_To_Check,a.Date_To_Check) <= 14
)
THEN 1
ELSE 0
END AS isDuplicate
FROM Table1 AS a
关于coldfusion - 我可以在 sql 中执行与此循环相同的功能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64453344/