0

フィールドの 1 つがfilename. これらのファイル名は、ファイル名の末尾にサフィックスを付けてバージョン管理されます。ファイルを作成しSampleName.xmlたが、後でこれを修正する必要があったとします。新しいバージョンはログに次のように表示されますSampleName_V2.xml(これは無限に増加し続ける可能性がありますが、私が見たほとんどは V8 です)。

このログのすべてのエントリにアクセスする方法が必要ですが、ファイル名に がSELECT付いているエントリのみを保持します。latest version number

これには簡単な答えが必要な気がしますが、一日中考えようとしていて、思いつきません。

誰にもアイデアはありますか?

編集:We do have a DateTime field in every row as wellそれが役立つ場合。

4

2 に答える 2

0

これで結果が出ると思います

SELECT TOP(1) filename
FROM table
ORDER BY datetime_field DESC

バージョン番号がこの順序であることが確実な場合は、_V1 to _V8役立ちます

SELECT TOP(1) filename
FROM table
ORDER BY  CAST(RIGHT(SUBSTRING([Filename],1,LEN(SUBSTRING([Filename], 0, 
                        PATINDEX('%.%',[Filename])) + '.') - 1),1) AS INT)

更新済み 最新 バージョンのすべてのファイル名を提供する別の方法を提案しています。

;WITH cte AS
(
   SELECT
       ROW_NUMBER() OVER (PARTITION BY LEFT(@products,LEN(@products)-CHARINDEX('_',@products))
                          ORDER BY date_field DESC
                          /*OR order by  CAST(RIGHT(SUBSTRING([Filename],1,LEN(SUBSTRING([Filename], 0, 
                            PATINDEX('%.%',[Filename])) + '.') - 1),1) AS INT) ASC*/
                          ) AS rno,
      filename
   FROM table
 )

 SELECT * FROM cte WHERE rno=1
于 2013-07-25T05:03:13.553 に答える