ROW_NUMBERを使用すると、Birthdateが結びついている可能性があるため、より正確に必要なレコードを識別するのに役立ちます。そのため、探している行を識別するCommon Table Expression(CTE)を作成します。行番号は1だから、
DECLARE @Table AS TABLE (ID INT, Name CHAR(1), Birthdate DATE)
INSERT INTO @Table VALUES
(1,'A','2016/01/01')
,(2,'B','2016/02/02')
,(3,'C','2016/03/03')
,(4,'D','2016/01/01') --note this is a tie for oldest birthdate
;WITH cte AS (
SELECT
*
,ROW_NUMBER() OVER (ORDER BY Birthdate, Id) as RowNumber
FROM
@Table
)
です次に、あなたが実際にCTEから削除し、データベースからレコードを削除したいのですが、あなただけ戻っていない(可能性が高い)のデータを変更したい場合は場合は、単に選択しますあなたが本当に変更/データをdelteしたい場合は、上記のコードの後に以下の権利をするでしょう:
DELETE FROM cte WHERE RowNumber > 1
SELECT * FROM @Table
あなたが本当に自分の条件に一致する1行をしたい場合は、単に上記のCTEの後にこの文を入れてしまうでしょう。
SELECT * FROM cte WHERE RowNumber = 1
1つのクエリでは、* data *と* delete rows *の両方を返すことはできません。あなたは本当に何をしたいですか? –
カーソルがありますか? – Aiden
カーソルでこれを行うことはできますか?すべての記録について、それは上記の規則をしていますか? – Aiden