2017-08-02 9 views
0

私は別のDP、RNを選択しようとしていますが、その結果から結果を選択するだけで、 'EDate'テーブルの別の列が値になります。これは私がこれまで持っているが、それは動作しません何です..私はそれを望んでいないように、ケースにはSql Distinct Row Countを選択してください

SELECT 
    COUNT(*) AS eCount 
FROM 
    (SELECT * 
    FROM 
     (SELECT DISTINCT 
       DP, RN 
      FROM 
       ECount 
      WHERE 
       DType = 'STRUCT') 
    WHERE 
     Month(EDate) = '07')) AS rows 

が、この提案された私はめちゃくちゃ私の明確な選択にSelect DistinctEDateを追加することはできません。 。

DP  RN  Edate  
DP01 RN01 21/06/2017  
DP01 RN01 22/07/2017 
DP02 RN03 22/07/2017 yes 
DP02 RN03 22/07/2017  
DP01 RN04 22/07/2017 yes 
DP02 RN05 22/07/2017 yes 
DP03 RN06 22/07/2017 yes 

EDateは、内側のクエリの一部ではないので、結果は= 4

+1

は少ない1つの派生テーブルでそれを試してみてください? – Fmanin

+0

@Fmanin例 – Ryan

+0

を参照してください: 'DType = 'STRUCT''はどこから来たのですか? – Fmanin

答えて

1

あなたが外部クエリにWHERE Month(EDate) = '07'を使用することができないはずです。あなたには、いくつかのデータの例を追加してくださいだろう

SELECT COUNT(*) 
FROM 
(
    SELECT DISTINCT DP, RN 
    FROM ECount t0 
    WHERE DType = 'STRUCT' 
    AND Month(EDate) = 7 
    AND NOT EXISTS 
    (
     SELECT 1 
     FROM ECount t1 
     WHERE t1.DP = t0.DP 
     AND t1.RN = t0.RN 
     AND t1.Month(EDate) <> 7 
     AND t1.DType = 'STRUCT' -- Not sure about this condition 
    ) 
) As rows 
+0

@ Zohar、私の例を見てください。私があなたの提案で持っている問題は、私のリストにDP01 RN01 22/07/2017を拾うでしょうが、それが意味を成すならば、それを拾いたくはありません。テーブルの中ではっきりしていないので。 – Ryan

+0

私は派生テーブルに「存在しない」条件を追加しました。それが役立つかどうか確認してください。 –

0
;With Cte 
As 
(
    Select 
     DP, 
     RN, 
     EDate, 
     Row_Number() Over(Partition By DP Order By RN Desc) As RowNum 
    From Example 
    Where Month(EDate) = 07 
) 
Select 
    DP, 
    RN, 
    EDate 
From Cte 
Where RowNum = 1 
Order By DP; 
+0

私は私の例で間違いを犯したことに気付きました。行が2回以上存在するかどうか気にしません。しかし、1つ以上の存在が存在し、その前の月からあれば、私は両方を除外したい。 – Ryan

関連する問題