0

我有一个工作查询,它​​计算表 LDS 中的所有不同值,其中 STATUS = 'OK' AND DATE >= '2012' 并且如果有多个相同的 ID,那么如果该 ID 的状态为“ok”,则计算具有最新日期的 ID “:

计数(不同的 lds1.ID)
从
    LDS lds1
    左连接 LDS lds2
        ON lds1.ID = lds2.ID
        AND lds1.Date < lds2.Date
        和 lds1.Status = 'ok'
在哪里
    lds1.Date >= '2012'
    和 lds1.Status = 'ok'
    并且 lds2.ID 为 NUL

我现在需要在运行上述查询之前添加另一个条件为 TRUE:“仅考虑 STATUS=NULL AND DATE>= 2011 的 ID”。STATUS = NULL 的初始 ID 实例不计入结果;它只是确定是否应该考虑 ID。

表 LDS:

身份证 | 状态 | 日期
1 | 空 | 2011
1 | 好的 | 2012
2 | 坏| 2012
1 | 坏| 2013
3 | 空 | 1999
3 | 好的 | 2012
4 | 好的 | 2012
5 | 空 | 2011
5 | 好的 | 2012
6 | 空 | 2012

完整查询的预期结果是 ID“5”。

更新:
也许这可以用数组来解决?
1. 从表 LDS 中取出 STATUS=NULL AND DATE>=2011 的所有 ID 并放入数组(结果:ID1、ID5、ID6)
2. 对于数组中的每个 ID,检查表中的所有实例并选择具有最大日期和状态不为空(结果:ID1,ID5)
3. 计算其中有多少状态=OK(结果:ID5)

4

2 回答 2

0
COUNT(DISTINCT lds1.ID)
FROM 
    LDS lds1
    LEFT JOIN LDS lds2
        ON (lds1.ID = lds2.ID)
    WHERE
        lds1.Date = '2012-01-01'
    AND lds1.Status = 'ok'
    AND lds2.ID IS NOT NULL 

尝试对条件使用 where 子句

于 2012-04-07T14:27:12.067 回答
0

我相信我已经找到了答案。也许有人可以验证这一点。

计数不同的 ID
来自 lds
    身份在哪里
(
计数(不同的 lds1.ID)
从
    LDS lds1
    左连接 LDS lds2
        ON lds1.ID = lds2.ID
        AND lds1.Date<lds2.Date
        和 lds1.Status = 'ok'
    在哪里
        lds1.Date>='2012'
        和 lds1.Status = 'ok'
        并且 lds2.ID 为 NUL
)
AND 日期>='2011' AND 状态=NUL
于 2012-04-08T02:24:31.327 回答