2016-07-20 4 views
1

に基づか:私はこの結果フィルタ最新ライン、こんにちは私は最新の日付に基づいてエンティティに属する記事を選択するには、このクエリを使用していた日

を持って

SELECT DISTINCT ld.artigo, 
       cd.data, 
       cd.entidade, 
       cd.tipodoc, 
       cd.numdoc 
FROM cabecdoc AS cd 
INNER JOIN linhasdoc AS ld 
     ON cd.id = ld.idcabecdoc 
INNER JOIN cabecdocstatus AS cds 
     ON ld.idcabecdoc = cds.idcabecdoc 
WHERE cd.tipodoc = 'FAR' 
     AND ld.artigo IS NOT NULL 
     AND cds.estado <> 't;r' 
ORDER BY cd.data DESC 

ましょうasumeを

Artigo Entidade   Data 
Tr01 002    10-07-2015 
Tr01 003    9-10-2015 
Mn09 001    11-12-2016 
Jk90 009    12-07-2016 
Tr01 012    4-09-2016 

私が探していた結果がこれです:

Artigo     entidade        data 
Mn09      0001         11-12-2016 
Jk90      0009        2-07-2016 
Tr01      0012        4-09-2016 

ありがとうございました!

答えて

1

を作成するためのベースとしてあなたの結果クエリを使用してください。

;With Cte As 
(
    SELECT ld.artigo 
     ,cd.data 
     ,cd.entidade 
     ,cd.tipodoc 
     ,cd.numdoc 
     ,Row_Number() Over (Partition By ld.artigo Order By cd.data desc) As Seq 
    FROM CabecDoc AS cd 
    INNER JOIN LinhasDoc AS ld ON cd.id = ld.IdCabecDoc 
    INNER JOIN CabecDocStatus AS cds ON ld.IdCabecDoc = cds.IdCabecDoc 
    WHERE cd.TipoDoc = 'FAR' 
     AND ld.Artigo IS NOT NULL 
     AND cds.Estado <> 't;r' 
) 
Select artigo, entidade, data 
From Cte 
Where Seq = 1 
+0

何 'についてたくさん助けましたDISTINCT'? –

+0

グループごとに一番上の項目しか取っていない場合は、「DISTINCT」操作は必要ないと思います。 – Siyual

+0

同じ日付に重複行があっても、1つは1となり、もう1つは2になります。 –

0

は、あなたが最新であるかを判断するためにartigoPARTITIONでウィンドウROW_NUMBER()機能を使用して、結果のみを引くことができ、新たな1

SELECT Artigo, Entidade, Data 
FROM ( 
     SELECT *, ROW_NUMBER() OVER (PARTITION BY Artigo ORDER BY Data DESC) as rn 
     FROM YourQuery YQ 
    ) T 
WHERE T.rn = 1 
+0

感謝を絞り込むことができ

;WITH CTE AS ( SELECT DISTINCT ld.artigo, cd.data, cd.entidade, cd.tipodoc, cd.numdoc FROM cabecdoc AS cd INNER JOIN linhasdoc AS ld ON cd.id = ld.idcabecdoc INNER JOIN cabecdocstatus AS cds ON ld.idcabecdoc = cds.idcabecdoc WHERE cd.tipodoc = 'FAR' AND ld.artigo IS NOT NULL AND cds.estado <> 't;r' ), CTE1 AS ( SELECT *,ROW_NUMBER() OVER(PARTITION BY Artigo,entidade order by data desc) as RN FROM CTE ) SELECT * FROM CTE1 WHERE rn = 1 

以下のようにあなたはウィンドウ関数を使用することによって、これを達成することができますが、 –

0

コードは、さらにあなたの正確なニーズに基づいて、返信用

+0

'ctrl-K'を使うか、' code ' –

+0

ありがとう、それは多くを助けた –

関連する問題