通過下面的查詢,我嘗試選擇一個DATES(總共12個), 在一個表格中,但符合一定的限制條件,對於這個查詢 我有兩個板連接在一起dni:太嵌套循環sql,耗盡內部資源
1.-日期1(date nac = 19-04-2016)在6個月大到7個月前的2天內搜索BD中的日期,如果存在該日期的話 更及時日期= OPPORTUNO:25-10-2016。 如果您找不到它,請在35個月之前查找6個月到2天之間的日期,如果存在此日期 請放棄OPORTUNO和日期= NO OPORTUNO:06-05-2017。
2.- DATE 2根據以前的日期查找一個日期(OPORTUNO:25-10-2016)> = 28天,< = 32天,如果存在 穿戴ooportuno和日期= Oportuno:23- 11-2016。 如果您沒有找到它,請根據上一個日期查找日期(NOT OPPORTUNE:06-05-2017)> = 30 DAYS和< = 929 DAYS(如果存在) 放入oprtuno並將日期= NO OPPORTUNO :13-07-2016。根據以前的日期
2.- DATE 3查找的日期(OPORTUNO:23-11-2016)> = 28天,< = 32天,如果EXISTS 穿戴oportuno和日期= OPORTUNO:25- 12-2016。 如果您沒有找到它,請根據上一個日期查找日期(不是OPORTUNO:13-07-2016)> = 30天和< = 929天,如果存在 放入oprtno並且日期= NO OPORTUNO :2016年10月28日。
及其在同樣的其他日期,直到你到達日期12.
我所做的就是窩日期1在DATE 2的條件,但嵌套在3日2 .....直到12。 我跑到DATE 7但從DATE 8顯示錯誤:查詢處理器耗盡內部資源,無法生成查詢計劃。我將發佈一個示例查詢結果。
(CASE
WHEN
EXISTS(SELECT top 1 FECHA FROM dbo.z298 WHERE
((DATEDIFF(DD ,(DATEADD(MONTH,5,(SELECT (REPORTE_ALTAS_BAJAS.[FECHA DE NACIMIENTO
DEL NIÑO(DD/MM/AAAA)]) FROM dbo.REPORTE_ALTAS_BAJAS where dbo.REPORTE_ALTAS_BAJAS.[NUMERO DEL
DOCUMENTO DE IDENTIDAD
DEL NIÑO] = dbo.z298.DNI))),fecha)
) BETWEEN 28 AND 32)
and dbo.REPORTE_ALTAS_BAJAS.[NUMERO DEL
DOCUMENTO DE IDENTIDAD
DEL NIÑO] = dbo.z298.DNI)
THEN
(select concat('OPORTUNO: ',(Select CONVERT(VARCHAR, (SELECT top 1 FECHA FROM dbo.z298 WHERE
((DATEDIFF(DD ,(DATEADD(MONTH,5,(SELECT (REPORTE_ALTAS_BAJAS.[FECHA DE NACIMIENTO
DEL NIÑO(DD/MM/AAAA)]) FROM dbo.REPORTE_ALTAS_BAJAS where dbo.REPORTE_ALTAS_BAJAS.[NUMERO DEL
DOCUMENTO DE IDENTIDAD
DEL NIÑO] = dbo.z298.DNI))),fecha)
) BETWEEN 28 AND 32)
and dbo.REPORTE_ALTAS_BAJAS.[NUMERO DEL
DOCUMENTO DE IDENTIDAD
DEL NIÑO] = dbo.z298.DNI)))))
when
EXISTS(SELECT top 1 FECHA FROM dbo.z298 WHERE
((DATEDIFF(day ,(DATEADD(MONTH,5,(SELECT (REPORTE_ALTAS_BAJAS.[FECHA DE NACIMIENTO
DEL NIÑO(DD/MM/AAAA)]) FROM dbo.REPORTE_ALTAS_BAJAS where dbo.REPORTE_ALTAS_BAJAS.[NUMERO DEL
DOCUMENTO DE IDENTIDAD
DEL NIÑO] = dbo.z298.DNI))),fecha)
) BETWEEN 30 AND 929)
and dbo.REPORTE_ALTAS_BAJAS.[NUMERO DEL
DOCUMENTO DE IDENTIDAD
DEL NIÑO] = dbo.z298.DNI)
then
(select concat('NO OPORTUNO: ',(SELECT top 1 FECHA FROM dbo.z298 WHERE
((DATEDIFF(day ,(DATEADD(MONTH,5,(SELECT (REPORTE_ALTAS_BAJAS.[FECHA DE NACIMIENTO
DEL NIÑO(DD/MM/AAAA)]) FROM dbo.REPORTE_ALTAS_BAJAS where dbo.REPORTE_ALTAS_BAJAS.[NUMERO DEL
DOCUMENTO DE IDENTIDAD
DEL NIÑO] = dbo.z298.DNI))),fecha)
) BETWEEN 30 AND 929)
and dbo.REPORTE_ALTAS_BAJAS.[NUMERO DEL
DOCUMENTO DE IDENTIDAD
DEL NIÑO] = dbo.z298.DNI)))
else ''
END) AS [FECHA 1 (SF)]
,
(CASE
WHEN
EXISTS(SELECT top 1 FECHA FROM dbo.z298 WHERE
((DATEDIFF(DD ,(SELECT top 1 FECHA FROM dbo.z298 WHERE
((DATEDIFF(DD ,(DATEADD(MONTH,5,(SELECT (REPORTE_ALTAS_BAJAS.[FECHA DE NACIMIENTO
DEL NIÑO(DD/MM/AAAA)]) FROM dbo.REPORTE_ALTAS_BAJAS where dbo.REPORTE_ALTAS_BAJAS.[NUMERO DEL
DOCUMENTO DE IDENTIDAD
DEL NIÑO] = dbo.z298.DNI))),fecha)
) BETWEEN 28 AND 32)
and dbo.REPORTE_ALTAS_BAJAS.[NUMERO DEL
DOCUMENTO DE IDENTIDAD
DEL NIÑO] = dbo.z298.DNI),fecha)
) BETWEEN 28 AND 32)
and dbo.REPORTE_ALTAS_BAJAS.[NUMERO DEL
DOCUMENTO DE IDENTIDAD
DEL NIÑO] = dbo.z298.DNI)
AND
EXISTS(SELECT top 1 FECHA FROM dbo.z298 WHERE
((DATEDIFF(DD ,(DATEADD(MONTH,5,(SELECT (REPORTE_ALTAS_BAJAS.[FECHA DE NACIMIENTO
DEL NIÑO(DD/MM/AAAA)]) FROM dbo.REPORTE_ALTAS_BAJAS where dbo.REPORTE_ALTAS_BAJAS.[NUMERO DEL
DOCUMENTO DE IDENTIDAD
DEL NIÑO] = dbo.z298.DNI))),fecha)
) BETWEEN 28 AND 32)
and dbo.REPORTE_ALTAS_BAJAS.[NUMERO DEL
DOCUMENTO DE IDENTIDAD
DEL NIÑO] = dbo.z298.DNI)
THEN
(select concat('OPORTUNO: ',(Select CONVERT(VARCHAR, (SELECT top 1 FECHA FROM dbo.z298 WHERE
((DATEDIFF(DD ,(SELECT top 1 FECHA FROM dbo.z298 WHERE
((DATEDIFF(DD ,(DATEADD(MONTH,5,(SELECT (REPORTE_ALTAS_BAJAS.[FECHA DE NACIMIENTO
DEL NIÑO(DD/MM/AAAA)]) FROM dbo.REPORTE_ALTAS_BAJAS where dbo.REPORTE_ALTAS_BAJAS.[NUMERO DEL
DOCUMENTO DE IDENTIDAD
DEL NIÑO] = dbo.z298.DNI))),fecha)
) BETWEEN 28 AND 32)
and dbo.REPORTE_ALTAS_BAJAS.[NUMERO DEL
DOCUMENTO DE IDENTIDAD
DEL NIÑO] = dbo.z298.DNI),fecha)
) BETWEEN 28 AND 32)
and dbo.REPORTE_ALTAS_BAJAS.[NUMERO DEL
DOCUMENTO DE IDENTIDAD
DEL NIÑO] = dbo.z298.DNI)))))
when
EXISTS(SELECT top 1 FECHA FROM dbo.z298 WHERE
((DATEDIFF(day ,(SELECT top 1 FECHA FROM dbo.z298 WHERE
((DATEDIFF(day ,(DATEADD(MONTH,5,(SELECT (REPORTE_ALTAS_BAJAS.[FECHA DE NACIMIENTO
DEL NIÑO(DD/MM/AAAA)]) FROM dbo.REPORTE_ALTAS_BAJAS where dbo.REPORTE_ALTAS_BAJAS.[NUMERO DEL
DOCUMENTO DE IDENTIDAD
DEL NIÑO] = dbo.z298.DNI))),fecha)
) BETWEEN 30 AND 929)
and dbo.REPORTE_ALTAS_BAJAS.[NUMERO DEL
DOCUMENTO DE IDENTIDAD
DEL NIÑO] = dbo.z298.DNI),fecha)
) BETWEEN 30 AND 929)
and dbo.REPORTE_ALTAS_BAJAS.[NUMERO DEL
DOCUMENTO DE IDENTIDAD
DEL NIÑO] = dbo.z298.DNI)
then
(select concat('NO OPORTUNO: ',(Select CONVERT(VARCHAR,(SELECT top 1 FECHA FROM dbo.z298 WHERE
((DATEDIFF(day ,(SELECT top 1 FECHA FROM dbo.z298 WHERE
((DATEDIFF(day ,(DATEADD(MONTH,5,(SELECT (REPORTE_ALTAS_BAJAS.[FECHA DE NACIMIENTO
DEL NIÑO(DD/MM/AAAA)]) FROM dbo.REPORTE_ALTAS_BAJAS where dbo.REPORTE_ALTAS_BAJAS.[NUMERO DEL
DOCUMENTO DE IDENTIDAD
DEL NIÑO] = dbo.z298.DNI))),fecha)
) BETWEEN 30 AND 929)
and dbo.REPORTE_ALTAS_BAJAS.[NUMERO DEL
DOCUMENTO DE IDENTIDAD
DEL NIÑO] = dbo.z298.DNI),fecha)
) BETWEEN 30 AND 929)
and dbo.REPORTE_ALTAS_BAJAS.[NUMERO DEL
DOCUMENTO DE IDENTIDAD
DEL NIÑO] = dbo.z298.DNI)))))
else ''
END) AS [FECHA 2 (SF)]
,
(CASE
WHEN
EXISTS(SELECT top 1 FECHA FROM dbo.z298 WHERE
((DATEDIFF(DD ,(SELECT top 1 FECHA FROM dbo.z298 WHERE
((DATEDIFF(DD ,(SELECT top 1 FECHA FROM dbo.z298 WHERE
((DATEDIFF(DD ,(DATEADD(MONTH,5,(SELECT (REPORTE_ALTAS_BAJAS.[FECHA DE NACIMIENTO
DEL NIÑO(DD/MM/AAAA)]) FROM dbo.REPORTE_ALTAS_BAJAS where dbo.REPORTE_ALTAS_BAJAS.[NUMERO DEL
DOCUMENTO DE IDENTIDAD
DEL NIÑO] = dbo.z298.DNI))),fecha)
) BETWEEN 28 AND 32)
and dbo.REPORTE_ALTAS_BAJAS.[NUMERO DEL
DOCUMENTO DE IDENTIDAD
DEL NIÑO] = dbo.z298.DNI),fecha)
) BETWEEN 28 AND 32)
and dbo.REPORTE_ALTAS_BAJAS.[NUMERO DEL
DOCUMENTO DE IDENTIDAD
DEL NIÑO] = dbo.z298.DNI),fecha)
) BETWEEN 28 AND 32)
and dbo.REPORTE_ALTAS_BAJAS.[NUMERO DEL
DOCUMENTO DE IDENTIDAD
DEL NIÑO] = dbo.z298.DNI)
and
EXISTS(SELECT top 1 FECHA FROM dbo.z298 WHERE
((DATEDIFF(DD ,(SELECT top 1 FECHA FROM dbo.z298 WHERE
((DATEDIFF(DD ,(DATEADD(MONTH,5,(SELECT (REPORTE_ALTAS_BAJAS.[FECHA DE NACIMIENTO
DEL NIÑO(DD/MM/AAAA)]) FROM dbo.REPORTE_ALTAS_BAJAS where dbo.REPORTE_ALTAS_BAJAS.[NUMERO DEL
DOCUMENTO DE IDENTIDAD
DEL NIÑO] = dbo.z298.DNI))),fecha)
) BETWEEN 28 AND 32)
and dbo.REPORTE_ALTAS_BAJAS.[NUMERO DEL
DOCUMENTO DE IDENTIDAD
DEL NIÑO] = dbo.z298.DNI),fecha)
) BETWEEN 28 AND 32)
and dbo.REPORTE_ALTAS_BAJAS.[NUMERO DEL
DOCUMENTO DE IDENTIDAD
DEL NIÑO] = dbo.z298.DNI)
THEN
(select concat('OPORTUNO: ',(Select CONVERT(VARCHAR, (SELECT top 1 FECHA FROM dbo.z298 WHERE
((DATEDIFF(DD ,(SELECT top 1 FECHA FROM dbo.z298 WHERE
((DATEDIFF(DD ,(SELECT top 1 FECHA FROM dbo.z298 WHERE
((DATEDIFF(DD ,(DATEADD(MONTH,5,(SELECT (REPORTE_ALTAS_BAJAS.[FECHA DE NACIMIENTO
DEL NIÑO(DD/MM/AAAA)]) FROM dbo.REPORTE_ALTAS_BAJAS where dbo.REPORTE_ALTAS_BAJAS.[NUMERO DEL
DOCUMENTO DE IDENTIDAD
DEL NIÑO] = dbo.z298.DNI))),fecha)
) BETWEEN 28 AND 32)
and dbo.REPORTE_ALTAS_BAJAS.[NUMERO DEL
DOCUMENTO DE IDENTIDAD
DEL NIÑO] = dbo.z298.DNI),fecha)
) BETWEEN 28 AND 32)
and dbo.REPORTE_ALTAS_BAJAS.[NUMERO DEL
DOCUMENTO DE IDENTIDAD
DEL NIÑO] = dbo.z298.DNI),fecha)
) BETWEEN 28 AND 32)
and dbo.REPORTE_ALTAS_BAJAS.[NUMERO DEL
DOCUMENTO DE IDENTIDAD
DEL NIÑO] = dbo.z298.DNI)))))
when
EXISTS(SELECT top 1 FECHA FROM dbo.z298 WHERE
((DATEDIFF(day ,(SELECT top 1 FECHA FROM dbo.z298 WHERE
((DATEDIFF(day ,(SELECT top 1 FECHA FROM dbo.z298 WHERE
((DATEDIFF(day ,(DATEADD(MONTH,5,(SELECT (REPORTE_ALTAS_BAJAS.[FECHA DE NACIMIENTO
DEL NIÑO(DD/MM/AAAA)]) FROM dbo.REPORTE_ALTAS_BAJAS where dbo.REPORTE_ALTAS_BAJAS.[NUMERO DEL
DOCUMENTO DE IDENTIDAD
DEL NIÑO] = dbo.z298.DNI))),fecha)
) BETWEEN 30 AND 929)
and dbo.REPORTE_ALTAS_BAJAS.[NUMERO DEL
DOCUMENTO DE IDENTIDAD
DEL NIÑO] = dbo.z298.DNI),fecha)
) BETWEEN 30 AND 929)
and dbo.REPORTE_ALTAS_BAJAS.[NUMERO DEL
DOCUMENTO DE IDENTIDAD
DEL NIÑO] = dbo.z298.DNI),fecha)
) BETWEEN 30 AND 929)
and dbo.REPORTE_ALTAS_BAJAS.[NUMERO DEL
DOCUMENTO DE IDENTIDAD
DEL NIÑO] = dbo.z298.DNI)
then
(select concat('NO OPORTUNO: ',(Select CONVERT(VARCHAR,(SELECT top 1 FECHA FROM dbo.z298 WHERE
((DATEDIFF(day ,(SELECT top 1 FECHA FROM dbo.z298 WHERE
((DATEDIFF(day ,(SELECT top 1 FECHA FROM dbo.z298 WHERE
((DATEDIFF(day ,(DATEADD(MONTH,5,(SELECT (REPORTE_ALTAS_BAJAS.[FECHA DE NACIMIENTO
DEL NIÑO(DD/MM/AAAA)]) FROM dbo.REPORTE_ALTAS_BAJAS where dbo.REPORTE_ALTAS_BAJAS.[NUMERO DEL
DOCUMENTO DE IDENTIDAD
DEL NIÑO] = dbo.z298.DNI))),fecha)
) BETWEEN 30 AND 929)
and dbo.REPORTE_ALTAS_BAJAS.[NUMERO DEL
DOCUMENTO DE IDENTIDAD
DEL NIÑO] = dbo.z298.DNI),fecha)
) BETWEEN 30 AND 929)
and dbo.REPORTE_ALTAS_BAJAS.[NUMERO DEL
DOCUMENTO DE IDENTIDAD
DEL NIÑO] = dbo.z298.DNI),fecha)
) BETWEEN 30 AND 929)
and dbo.REPORTE_ALTAS_BAJAS.[NUMERO DEL
DOCUMENTO DE IDENTIDAD
DEL NIÑO] = dbo.z298.DNI)))))
else ''
END) AS [FECHA 3 (SF)]
Imgage whit the table structure and the result of this query
我不知道你在這裏試圖做什麼,但它聽起來像你可能能夠從表中查詢單個日期,並從第一個查詢計算其他字段。你能否用純文本解釋查詢的邏輯,以更好地解釋你想要做什麼? – andrewec
你想做什麼?給出示例數據和期望的結果。人們不應該首先破譯你複雜的代碼,找出你想要做的事情,並告訴你如何做得更好。 –
由於您提出了建議,我將重新開始。首先,用你說的語言寫下你的目標。然後查看您的表結構以查看數據的位置。最後,開始編寫你的查詢。採取嬰兒的步驟。提前測試,經常測試。如果你認爲你需要一個循環,你可能是在錯誤的軌道上。 –