1

私は次の表を持っています

LogCheque (LogChequeID、ChequeID、Date、HolderID)

各行は、どの小切手 (ChequeID) が誰 (HolderID) にどの日付に転送されたかを示します。
LogCheques のリストを選択したいのですが、各チェックが 1 回だけ表示され、最後の転送が表示されます

サンプルデータ

LogChequeID     ChequeID    Date            HolderID  
1               1012        2013-01-10      200  
2               1526        2013-01-12      125  
3               1012        2013-01-19      413  
4               1526        2013-02-11      912  
5               1526        2013-02-17      800  

そして私の望ましい出力は

LogChequeID     ChequeID    Date            HolderID  
3               1012        2013-01-19      413
5               1526        2013-02-17      800

私が試してみました

select lch.ChequeID, lch.DateFa, lch.ChequeID
from LCheque lch
group by lch.ChequeID, lch.DateFa, lch.LChequeID
having lch.LChequeID = (select MAX(LChequeID) where ChequeID = lch.ChequeID)

しかし、それはすべての行を返します。

どんな助けでも非常に役に立ち、両手を広げて感謝します:)前もって感謝します。

4

3 に答える 3

4

CTE + ROW_NUMBER()ランキング関数を使用できます

;WITH cte AS
 (
  SELECT *, ROW_NUMBER() OVER (PARTITION BY ChequeID ORDER BY [Date] DESC) AS rn
  FROM dbo.LCheque 
  )
  SELECT *
  FROM cte
  WHERE rn = 1

SQLFiddle のデモ

ORオプションとEXISTS演算子

SELECT *
FROM dbo.LCheque t
WHERE EXISTS(
             SELECT 1
             FROM dbo.LCheque t2
             WHERE t.ChequeID = t2.ChequeID
             HAVING MAX(t2.[Date]) = t.[Date]
             )

SQLFiddle のデモ

ORオプションとAPPLY()演算子

SELECT *
FROM dbo.LCheque t CROSS APPLY (
                                SELECT 1 
                                FROM dbo.LCheque t2
                                WHERE t.ChequeID = t2.ChequeID
                                HAVING MAX(t2.[Date]) = t.[Date]
                                ) o (IsMatch)

SQLFiddle のデモ

于 2013-03-02T08:59:24.257 に答える
1
  select lch.ChequeID,max(lch.Date),lch.HolderID  
  from LCheque lch
  group by lch.ChequeID,lch.HolderID  
于 2013-03-02T07:39:47.923 に答える
1

CTE ははるかに優れています (おそらくより効率的です)。

select lch.ChequeID, lch.DateFa, lch.ChequeID
from LCheque lch
where lch.LChequeID = (select MAX(LChequeID) where ChequeID = lch.ChequeID)
于 2013-03-02T16:52:50.673 に答える