I have two tables:
Table 1 consists of ID
and INDX
. INDX
is the date around the CODE
from Table2 needs to be verified.
Table2 consists of ID
, CODE
, DAT
, QRTR
. DAT
is the date on which the CODE
is given with corresponding quarter of the year in QRTR
.
表1:
ID | INDX |
---|---|
1 | 2014-06-07 |
表2:
ID | CODE | DAT | QRTR |
---|---|---|---|
1 | A | 2013-08-20 | 20133 |
1 | A | 2013-12-20 | 20134 |
1 | A | 2014-01-02 | 20141 |
1 | A | 2014-11-18 | 20144 |
1 | A | 2015-02-08 | 20151 |
1 | A | 2015-04-20 | 20152 |
1 | A | 2015-11-16 | 20154 |
1 | A | 2016-04-12 | 20162 |
1 | A | 2017-01-20 | 20171 |
1 | A | 2017-12-12 | 20174 |
1 | A | 2018-01-03 | 20181 |
1 | A | 2019-05-20 | 20193 |
1 | A | 2020-01-01 | 20201 |
1 | A | 2021-04-16 | 20212 |
1 | A | 2021-08-20 | 20213 |
1 | A | 2021-12-30 | 20214 |
Now I need to know if CODE
'A' was present within 300 days until INDX
date.
If so, I need to verify if CODE
'A' is given at least one QRTR
per year starting with the first data entry of CODE
'A' (within 300 days prior INDX
) including the future CODE
s.
我try 了以下几种方法:
SELECT
t1.ID,
years.Year,
CASE
WHEN EXISTS (
SELECT 1
FROM table2 t2
WHERE t2.ID = t1.ID
AND t2.CODE = 'A'
AND years.Year = YEAR(DATEADD(QUARTER, t2.QRTR % 10 - 1, DATEADD(YEAR, t2.QRTR / 10 - 1900, '19000101')))
) THEN 'Yes'
ELSE 'No'
END AS IsQuarterly
FROM
(
SELECT DISTINCT ID
FROM table1
) AS t1
CROSS JOIN
(
SELECT DISTINCT YEAR(DATEADD(QUARTER, (QRTR % 10) - 1, DATEADD(YEAR, (QRTR / 10) - 1900, '19000101'))) AS Year
FROM table2
WHERE CODE = 'A'
) AS years
ORDER BY
t1.ID,
years.Year;
日期:db<>fiddle.(用谷歌翻译翻译)
为了表达清晰起见,我在上面的表格中只包含了ID
1.
通过我的查询,我只得到每年是否至少有一个CODE
‘A’存在,但直到CODE
‘A’出现在哪个时间,以及是否已经有一个CODE
‘A’的新时期,我才能得到信息.
我预计会出现以下情况,因为我认为最好是得出一个CODE
个‘A’每年至少出现一个QRTR
个‘A’的时期.
ID | START | END |
---|---|---|
1 | 2013-08-20 | 2021-12-30 |
2 | 2017-12-12 | 2019-05-20 |
2 | 2021-08-20 | 2021-12-30 |
我不确定显示结果的最佳解决方案是什么.