2

私はこのSQLテーブルを持っています:

Niin char(9)
EffectiveDate Date
Price  currency

NIIN は、次のように異なるEffectiveDateとPriceの値で繰り返されます

**NIIN           EffectiveDate       Price**

012345678        6/1/2011              89.00
012345678        6/1/2012              99.00
012345678        6/1/2012              99.00
123456789        5/1/2011              77.00
123456789        5/1/2012              80.00
123456789        5/1/2012              80.00
etc....

私がする必要があるのは、重複するEffectiveDate値がある場合、Priceが常に同じであると仮定して、MaxEffectiveDateのPriceでNIINを返すことです。

Therfore 私が提供した例から、クエリは次を返します。

012345678       99.00
123456789       80.00

助けてくれてありがとう。

4

3 に答える 3

2

を使用して、より高い発効日がないもののみを選択しますNOT EXISTS

SELECT t.niin, t.price 
  FROM theTable t 
 WHERE NOT EXISTS(SELECT NULL 
                    FROM theTable ot
                   WHERE ot.niin = t.niin
                     AND ot.effectiveDate > t.effectiveDate
                  )

これは、数年前に私が尋ねた同様の質問に触発された回答であり、 OMGポニーが回答しました。

于 2012-09-13T22:02:50.980 に答える
2

これにはCTEを使用できます:

;with cte as
(
  select niin,
    row_number() over(partition by niin order by effectivedate desc) rn,
    price
  from yourtable
)
select niin, price
from cte
where rn = 1

SQL Fiddle with Demoを参照してください

于 2012-09-13T22:07:33.170 に答える
0

私の2セント

SELECT DISTINCT Niin, Price
FROM <tablenamehere> nt1
WHERE EffectiveDate = (SELECT MAX(EffectiveDate) 
                       FROM <tablenamehere> nt2 
                       WHERE nt1.Niin = nt2.Niin)

もう少し直感的に読めると思います

于 2012-09-13T22:38:32.850 に答える