0

「メモ」レコードを分割してランク付けし、ID_Task でグループ化するクエリがあります (ユーザーはタスクごとにメモを追加します)。メモを日付でランク付けしたいのですが、2 つの日付の間でランク付けされるように制限したいとも考えています。

私は SQL Server 2008 を使用しています。これまでのところ、私の SELECT は次のようになっています。

SELECT  Note.ID, 
        Note.ID_Task, 
        Note.[Days], 
        Note.[Date], 
        ROW_NUMBER() OVER (PARTITION BY ID_Task ORDER BY CAST([Date] AS DATE), Edited ASC) AS Rank
        FROM
        Note
        WHERE
        Note.Locked = 1 AND Note.Deleted = 0

ここで、WHERE 句を一番下に置くと、ランクはまだありますが、フィルターで除外される可能性があるため、ランク 1 のアイテムを取得する場合と取得しない場合があると思います。では、レコード WHERE のみをパーティション分割して、他のすべてを無視する方法はありますか? 私が推測するサブクエリを分割できます。

ランク番号を使用して、別のクエリで各タスクの最新のメモを見つけることが意図されています。そのクエリでは、この結果 WHERE ランク = 1 と結合します。

4

1 に答える 1

3

row_number()後に 動作しwhereます。常に行 1 を取得します。

例えば:

declare @t table (id int)
insert @t values (3), (1), (4)
select  row_number() over (order by id)
from    @t
where   id > 1

これは以下を出力します:

1
2
于 2013-08-07T11:48:15.940 に答える