C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: どのようなSQL文を書けばいいのでしょうか


(過去ログ 76 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■44832 / inTopicNo.1)  どのようなSQL文を書けばいいのでしょうか
  
□投稿者/ MO (3回)-(2009/12/18(Fri) 21:00:27)

分類:[データベース全般] 

SQL文について
2009/12/01   | 
2009/12/02  |
2009/12/02  |---100
・・・・・  |
2009/12/20  |
---200
上記のデータがあり、日付の古いデータを削除したいのですが、但し最新の日付のデータは100件は残す
どのようなSQL文を書けばいいのでしょうか?(SQL サーバーです)

引用返信 編集キー/
■44833 / inTopicNo.2)  Re[1]: どのようなSQL文を書けばいいのでしょうか
□投稿者/ オショウ (481回)-(2009/12/18(Fri) 22:11:54)
No44832 (MO さん) に返信
> 上記のデータがあり、日付の古いデータを削除したいのですが、但し最新の日付のデータは100件は残す
> どのようなSQL文を書けばいいのでしょうか?(SQL サーバーです)

  データベースの種類は何?
  その日付情報の格納されているカラムの属性は?
  文字列?日付?

  それらによって、解は全て異なります・・・

以上。
引用返信 編集キー/
■44834 / inTopicNo.3)  Re[2]: どのようなSQL文を書けばいいのでしょうか
□投稿者/ paradox (1回)-(2009/12/18(Fri) 22:58:46)
DELETE FROM テーブル
WHERE 主キー NOT IN (
 SELECT TOP 100 主キー
 FROM テーブル ORDER BY 日付
);

こんなのでどうでしょうか?
SQL ServerのバージョンによってはTOP n は使えないかもしれませんが。
引用返信 編集キー/
■44835 / inTopicNo.4)  Re[3]: どのようなSQL文を書けばいいのでしょうか
□投稿者/ オショウ (482回)-(2009/12/19(Sat) 00:38:39)
2009/12/19(Sat) 00:39:19 編集(投稿者)
じゃ〜SQL Server 2005以降で、日付がdatetimeとして・・・

DELETE
FROM
[Table]
WHERE
EXISTS (
	SELECT
	*
	FROM
	(
		SELECT
		ROW_NUMBER() OVER( ORDER BY [日付] ) AS RowNum,
		*
		FROM
		[Table]
	) t1
	WHERE
	[Table].dt = t1.dt AND
	t1.RowNum > 100
)

※わざわざ難しくする必要もないけど・・・
 ROW_NUMBER()使えるようになったので!

確認するならば・・・
DELETE
を、
SELECT *
に変更すれば、該当レコードが抽出できますので。

以上。参考まで

引用返信 編集キー/
■44838 / inTopicNo.5)  Re[4]: どのようなSQL文を書けばいいのでしょうか
□投稿者/ MO (1回)-(2009/12/19(Sat) 11:10:17)
select TOP(100) とか ROW_NUMBER() OVER( ORDER BY [日付] ) AS RowNum が使えるんですね。
大変参考になりました。ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -