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

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

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

Re[5]: 時間が最新のデータをUPDATEしたい


(過去ログ 12 を表示中)

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

■3618 / inTopicNo.1)  時間が最新のデータをUPDATEしたい
  
□投稿者/ 質問 (1回)-(2007/05/17(Thu) 15:48:13)

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

c#でデータを変更する際に
SQL文でのUPDATEで分からなくなりました。教えていただけますでしょうか

テーブル
時間  番号
datatime型  外部キー

で入ってます。
updateする際に指定番号の中で時間が最新のもののデータを変更したいです

update文の書き方を教えていただけますでしょうか。
お願い致します。
たぶん、update文にselect文を混ぜて出す方法だと思いますが書き方が分かりませんでした


引用返信 編集キー/
■3619 / inTopicNo.2)  Re[1]: 時間が最新のデータをUPDATEしたい
□投稿者/ HiJun (32回)-(2007/05/17(Thu) 16:10:00)
Oracleだったら、

update テーブル名 Set 変更する項目
Where 時間 IN (Select MAX(時間) FROM テーブル名)

といった感じでしょうか
引用返信 編集キー/
■3621 / inTopicNo.3)  Re[2]: 時間が最新のデータをUPDATEしたい
□投稿者/ 質問 (3回)-(2007/05/17(Thu) 16:17:53)
No3619 (HiJun さん) に返信
すみません。SQL2000です
引用返信 編集キー/
■3622 / inTopicNo.4)  Re[3]: 時間が最新のデータをUPDATEしたい
□投稿者/ 七曜 (4回)-(2007/05/17(Thu) 16:26:54)
2007/05/17(Thu) 16:27:59 編集(投稿者)
2007/05/17(Thu) 16:27:53 編集(投稿者)

> すみません。SQL2000です

#Oracleなら…って書かれてても試してみるorSQLのHelpと見比べてみるくらいはしてみては?

SQL Server 2000/2005でも同様のはずです。(単純な構文なので)

UPDATE テーブル SET 更新したいカラム=値
WHERE 時間 IN (SELECT MAX(時間) FROM テーブル)

ちなみに時間はユニークとは限らないので、複数行更新される可能性があります。

引用返信 編集キー/
■3625 / inTopicNo.5)  Re[1]: 時間が最新のデータをUPDATEしたい
□投稿者/ 片桐 (1回)-(2007/05/17(Thu) 16:46:17)
片桐 さんの Web サイト
2007/05/17(Thu) 16:49:48 編集(投稿者)
2007/05/17(Thu) 16:48:25 編集(投稿者)

要件:変更したいテーブルの中の、番号ごとの時間が一番あたらしいレコードだけに何かアップデートしてみたい

だと解釈したので……

SQL-Server だと

update A
set A.変更したい列= 変更したい値
from 変更したいテーブル A,
( select 番号, max(時間) as 時間 from 変更したいテーブル group by 番号) B
where A.番号 = B.番号 AND A.時間 = B.時間

ですね。(Oracleだともっと簡単にいけますけどw)
Bというサブテーブル「番号ごとの時間が一番あたらしいレコードだけのデータの塊」を作って、それを元に更新すれば大丈夫だと思います。ただし、これでも、同じ番号、同じ時間になっているものが複数あればそれらは全て更新対象ですです。

くわしくは、相関サブクエリ とかのキーワードで検索してみてください

引用返信 編集キー/
■3628 / inTopicNo.6)  Re[2]: 時間が最新のデータをUPDATEしたい
□投稿者/ Mr.T (44回)-(2007/05/17(Thu) 17:25:12)
Mr.Tです、こんにちは。

#すでに回答が出ているわけですが
#ちょいと気になったので

質問者の方は、
>updateする際に指定番号の中で時間が最新のもののデータを変更したいです
といっているので、

> update A
> set A.変更したい列= 変更したい値
> from 変更したいテーブル A,
> ( select 番号, max(時間) as 時間 from 変更したいテーブル group by 番号) B
> where A.番号 = B.番号 AND A.時間 = B.時間

これに、
and A.番号 = @番号
みたいな形にしないと、全件対象になってしまいます。
引用返信 編集キー/
■3630 / inTopicNo.7)  Re[3]: 時間が最新のデータをUPDATEしたい
□投稿者/ 質問 (4回)-(2007/05/17(Thu) 18:46:12)
No3628 (Mr.T さん) に返信
> Mr.Tです、こんにちは。
>
> #すでに回答が出ているわけですが
> #ちょいと気になったので
>
> 質問者の方は、
> >updateする際に指定番号の中で時間が最新のもののデータを変更したいです
> といっているので、
>
>>update A
>> set A.変更したい列= 変更したい値
>> from 変更したいテーブル A,
>> ( select 番号, max(時間) as 時間 from 変更したいテーブル group by 番号) B
>> where A.番号 = B.番号 AND A.時間 = B.時間
>
> これに、
> and A.番号 = @番号
> みたいな形にしないと、全件対象になってしまいます。
解決済み
引用返信 編集キー/
■3633 / inTopicNo.8)  Re[4]: 時間が最新のデータをUPDATEしたい
□投稿者/ 注意人 (2回)-(2007/05/17(Thu) 21:10:51)
No3630 (質問 さん) に返信
> ■No3628 (Mr.T さん) に返信
>>Mr.Tです、こんにちは。
>>
>>#すでに回答が出ているわけですが
>>#ちょいと気になったので
>>
>>質問者の方は、
>>>updateする際に指定番号の中で時間が最新のもののデータを変更したいです
>>といっているので、
>>
> >>update A
> >> set A.変更したい列= 変更したい値
> >> from 変更したいテーブル A,
> >> ( select 番号, max(時間) as 時間 from 変更したいテーブル group by 番号) B
> >> where A.番号 = B.番号 AND A.時間 = B.時間
>>
>>これに、
>> and A.番号 = @番号
>>みたいな形にしないと、全件対象になってしまいます。

フィードバックもせずにスレッドを締めるのは大変失礼です。やめましょう。
引用返信 編集キー/
■3639 / inTopicNo.9)  Re[5]: 時間が最新のデータをUPDATEしたい
□投稿者/ 片桐 (3回)-(2007/05/17(Thu) 23:56:03)
片桐 さんの Web サイト
えーっと、、、解決したんかな?
したんやったらええねんけど……

Mr.Tさん、補足ありがとうございます。
「指定番号の中で」の意味がWhere句条件なのか、対象レコードの集団条件のことなのか、で、私は後者の意味にとってました。

Where句条件、つまり対象レコードを1件にしたい場合にはMr.Tのとおり、A.番号=@番号が必要ですです、はい。
引用返信 編集キー/
■3653 / inTopicNo.10)  Re[5]: 時間が最新のデータをUPDATEしたい
□投稿者/ Mr.T (46回)-(2007/05/18(Fri) 08:24:01)
Mr.Tです、あーびっくりした。

> >>みたいな形にしないと、全件対象になってしまいます。
>
> フィードバックもせずにスレッドを締めるのは大変失礼です。やめましょう。

私が間違って、スレッド締めちゃったのかと思い、質問者の方の編集キーになんども
自分のソレをいれたのはないしょです...orz
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -