3

クライアントごとに最新のレコードを取得しようとしている単純なスクリプトがあります。TSQLでこれを行うにはどうすればよいですか? これは現在私のコードですが、これは合計 1 つのレコードのみを選択しています。この 1 つのレコードには、各クライアントではなく、すべてのクライアントの最新のレコードが表示されます。どうすればこれを再定式化できますか?

SELECT TOP 1
C.ClientID, actual_date
From ClientRecords C
WHERE (@ClientID is NULL or C.Client_ID = @ClientID)
Group by C.ClientID, actual_date
ORDER BY C.actual_date
4

4 に答える 4

4

actual_dateMAX()で関数を 使用して列を集計します

SELECT  C.ClientID, MAX(actual_date) max_DATE
From    ClientRecords C
WHERE   (@ClientID is NULL or C.Client_ID = @ClientID)
Group   by C.ClientID
ORDER   BY C.actual_date
于 2013-03-11T16:10:59.593 に答える
1

これはテストされていませんが、次のようになります。

select 
c.clientId, max(actual_date) as Actual_date
from clientrecords C
group by c.clientID
order by c.clientID

これにより、clientId 順に並べられた、各クライアントの実際の最も高い日付が得られます。

于 2013-03-11T16:16:08.000 に答える
0

その目的で SUBQUERY を使用できます。

SELECT 
    C.ClientID ,
    (SELECT MAX(C1.actual_date) FROM ClientRecords C1 WHERE C1.Client_ID = C.Client_ID) AS MaxDate
FROM ClientRecords C
WHERE (@ClientID is NULL or C.Client_ID = @ClientID)
Group by C.ClientID, actual_date
ORDER BY C.actual_date
于 2013-03-13T07:48:33.673 に答える
0

みんなありがとう、しかし私はこれに対してもう少し満足のいく解決策を見つけました:

WITH rs AS
(

SELECT 
C.ClientID, actual_date,ROW_NUMBER() OVER(ORDER BY C.ClientID, actual_date)rid
From ClientRecords C
)

SELECT * FROM rs WHERE rid =1
于 2013-03-11T18:54:59.643 に答える