DOBON.NET DOBON.NETプログラミング掲示板過去ログ

質問

  • 題名: 質問
  • 著者: とうちん
  • 日時: 2004/09/09 20:29:50
  • ID: 6086
  • この記事の返信元:
    • (なし)
  • この記事への返信:
  • ツリーを表示
環境/言語:[VB.net WindowsXP]
分類:[.NET]

こんな方法ができないか教えてください。

DataAdapterで取得したデータをデータテーブルに格納します。
そのテーブルから"最大"のもの(年月)を検索することは出来ますか?
データセット.データテーブル.Select("max(年月)")
このように、データテーブルから最大の年月は取得できるのでしょうか?
(このやり方は出来なかったです。第一引数は、検索条件だから駄目だったからかな)
何かいいアドバイスがあれば教えてください
  • 題名: Re[1]: 質問
  • 著者: laugh
  • 日時: 2004/09/09 21:44:19
  • ID: 6087
  • この記事の返信元:
    • [6086] 質問 とうちん 2004/09/09 20:29:50
  • この記事への返信:
  • ツリーを表示
データセット.データテーブル.Select("年月 = max(年月)")

↑これでできると思います♪
  • 題名: Re[2]: 質問
  • 著者: こど。
  • 日時: 2004/09/09 22:08:18
  • ID: 6088
  • この記事の返信元:
  • この記事への返信:
  • ツリーを表示
もしFillの後行が一切削除されることがないのであれば、上記方法でできます。

ただ、既存行を削除した場合に削除行が検索されて落ちるのを防ぐのに行状態
フィルタを掛けて、
「.Select("年月=max(年月)", "", DataViewRowState.CurrentRows)」
とする必要がありますけど、それでもmaxの返す値はテーブルに存在する削除行
も含めた全ての行から求められます。
例えばmaxの行が"200409"だとして、これを削除した場合、maxは"200409"のまま
ですが、一致する、まだ存在する行はなくなります。
ただし、削除後に行状態を確定してしまってもかまわないプログラムの場合、
AcceptChangesをしてしまえば削除行は本当に削除されるため、上記方法で可能
です。
(とはいえ、行状態を使用して処理を振り分けることのないプログラムなんて
あるかどうか?)

.Select("", "年月 DESC", DataViewRowState.CurrentRows)
として0行目だけ使用すれば大丈夫だと思います・・・。
何かみっともないかもしれませんが。

余談ですが
行の削除は新規行と既存行で振る舞いが異なるようです。
新規行は即座にDataTableから削除され、既存行は、削除がマークされて隠蔽さ
れるものの、確定を発行するまで存在はし続けるようです。
  • 題名: Re[3]: 質問
  • 著者: こど。
  • 日時: 2004/09/09 22:11:11
  • ID: 6089
  • この記事の返信元:
  • この記事への返信:
  • ツリーを表示
行ではなく値がほしいだけであれば、
.Compute("max(年月)", "")
でもできると思います。
  • 題名: Re[4]: 質問
  • 著者: とうちん
  • 日時: 2004/09/10 9:03:53
  • ID: 6094
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
なるほど。年月 = MAX(年月)ですか。
第一引数が条件なので、SQLでいうとWhere句の所に当たるのかと思っていました。
Where句の所だけではなく、Having句の所でも出来るのですね。

こど。さん詳しい解説どうもありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板