0

STATUS = 'OK' AND DATE >= '2012' であるテーブル LDS からすべての個別の値をカウントする作業クエリがあります。また、同一の ID が複数ある場合は、この ID のステータスが「ok」の場合、日付が最も新しいものをカウントします。 ":

COUNT(DISTINCT lds1.ID)
から
    LDS lds1
    左結合 LDS lds2
        ON lds1.ID = lds2.ID
        AND lds1.Date < lds2.Date
        AND lds1.Status = 'ok'
どこ
    lds1.Date >= '2012'
    AND lds1.Status = 'ok'
    かつ lds2.ID が NUL である

上記のクエリを実行する前に、TRUE になる別の条件を追加する必要があります。「STATUS=NULL AND DATE>= 2011 の ID のみを考慮する」。STATUS = NULL の初期 ID インスタンスは結果にカウントされません。ID を考慮する必要があるかどうかを判断するだけです。

テーブル LDS:

ID | ステータス | 日にち
1 | ヌル | 2011年
1 | わかりました | 2012年
2 | 悪い | 2012年
1 | 悪い | 2013年
3 | ヌル | 1999年
3 | わかりました | 2012年
4 | わかりました | 2012年
5 | ヌル | 2011年
5 | わかりました | 2012年
6 | ヌル | 2012年

完全なクエリの期待される結果は ID "5" です。

更新:
多分これは配列で解決できますか?
1. STATUS=NULL AND DATE>=2011 であるテーブル LDS からすべての ID を取得し、配列に入れます (結果: ID1、ID5、ID6)
2. 配列内の各 ID について、テーブル内のすべてのインスタンスをチェックし、次のものを選択します最大の日付 AND STATUS IS NOT NULL (結果: ID1、ID5)
3. STATUS=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

私は答えを見つけたと信じています。誰かがこれを確認できるかもしれません。

COUNT DISTINCT ID
FROM lds
    どこのID
(
COUNT(DISTINCT lds1.ID)
から
    LDS lds1
    左結合 LDS lds2
        ON lds1.ID = lds2.ID
        AND lds1.Date<lds2.Date
        AND lds1.Status = 'ok'
    どこ
        lds1.Date>='2012'
        AND lds1.Status = 'ok'
        かつ lds2.ID が NUL である
)
AND DATE>='2011' AND STATUS=NUL
于 2012-04-08T02:24:31.327 に答える