FC2ブログ

サラリーマンのすらすらIT日記

IT関連を中心とした日々を綴ります。
--/--/--

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2012/02/25

SQL-同じ番号内で最小のデータを取り出す(不採用版)

さて、昨日予告した「同じ番号内で最小のデータを取り出す」のに、採用しなかった方法を紹介します。

SQLの関数一覧で、今回関係あるだろうと思われる箇所を見ていました。こちらです。おそらく使うのはMIN関数。ただ普通に使うと、データ全体から数値(今回だと副番)が最小のものを1つ選択してしまうだけで(昨日挙げた例だと、書類番号:04ST240436、副番:-3の1個)、所望の結果にはなりません。ふとMIN関数の前後を見ていると、合計値を得るSUM関数がありました。しばらくこれを見ていて気がつきました。これだ!

今回、副番は-1,-2,-3,...という風に順番に付いていきます。基本的に途中の数値が漏れることはありません(つまり、-1,-2,-4,...というようなことはない)。ということは、SUM関数で得た結果から最小の副番を得ることができます。つまり最新が-1ならその和は-1、最新が-2ならその和は-1-2=-3、...まとめると、





SUM関数の結果副番の最小番号
-1-1
-3-2
-6-3

というわけです。

ここから数学の世界です。一般に 1 から n までの和 k は、



です。今回、副番がマイナスなので符号を付け替えて、



とします。これを変形すると、



という2次方程式になります。これを n について解くと、



となります。ここで複号は今回マイナス側だけが有効なので、



です。この式に和 k=-1,-3,-6を代入すると、



となり、所望の結果が得られたことになります。

これでできたわけですが、しばらく考えてみて採用を断念しました。その理由は3つあります。

1.整数値を得るためにもかかわらず、べき根(ルート)と割算を使うので浮動小数演算が入ってくる。うまくプログラムしないと整数にならない可能性がある。四捨五入などの整数化でもいけそうな気がするが、将来何か落とし穴が出てきそうな気がする。直感的に危険な感じだ。

2.あとでこのプログラムを誰かに引き継ぐことになると、この処理を理解してくれるかどうか。プログラマが皆2次方程式を解けるほどの数学力があるかどうかは不明だ。


そして、次の点が不採用の最も大きな理由です。

3.将来書類が削除されたりして副番に欠番が発生した場合、この処理が使えなくなる。つまり-1,-2,-4という副番だと和は-7だが、上述の処理だと整数値ではなく無理数が算出されて破綻する。現行は欠番はないが、将来仕様変更になることがあるかもしれない。



ということで、この手法は断念しました。ちょっとがんばってSQLを書けば実現できるのですから。

スポンサーサイト

コメント

コメントの投稿

  • URL
  • コメント
  • パスワード
  • 秘密
  • 管理者にだけ表示を許可する

トラックバック

トラックバックURL:http://sookibizviz.blog81.fc2.com/tb.php/1116-4867cc01

■  カレンダー

04 | 2019/05 | 06
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 -

■  プロフィール

sookibizviz

Author:sookibizviz
仕事の内容やソフトの紹介を交えながら、日々の悪戦苦闘を綴っていきます。

■  最新記事

■  最新コメント

■  最新トラックバック

■  月別アーカイブ

■  カテゴリ

未分類 (64)
BizViz (24)
IT (1119)
計量 (76)
環境 (26)
数学 (181)
ニュース (46)
本 (187)
音楽 (113)
囲碁 (5)
将棋 (26)
ブログ (14)
日記 (19)

■  FC2カウンター

■  検索フォーム

■  RSSリンクの表示

■  QRコード

QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。