coldfusion - 我可以在 sql 中执行与此循环相同的功能吗?

标签 coldfusion sql-server-2016

我正在做的是检查多个日期之间的差距,如果与最后一个非重复结果之间没有 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/

相关文章:

coldfusion - ColdFusion 10 : "Bad Gateway Error" 的多实例问题

sql - LAG 函数和 NULL

sql - SSIS错误: Invalid object name - but object exists and query runs in SSMS

sql-server - SQL Server 2016 显示(Hypervisor)中的版本

javascript - 与服务器端和客户端验证冲突

loops - 如何解析CF结构体

string - 如何比较两个列表并找出它们之间的差异?

coldfusion - 我可以在 ColdFusion 中通过引用传递一个简单的值吗?

sql - BULK INSERT 中格式附近的语法不正确?

sql-server-2016 - 值中的特殊字符不能与 like 运算符一起使用,而在 SQL Server 中与 = 运算符一起使用