Hatena::ブログ(Diary)

kunikuの日記

2017-03-14

[SQL]SQLで最新の日付のデータや同一グループの中で最新のレコードを取得する

15:40 |  [SQL]SQLで最新の日付のデータや同一グループの中で最新のレコードを取得するを含むブックマーク

例えば、

価格情報テーブル
 商品ID
 日付
 価格

といった場合に、商品IDごとに、最新の価格を取得するといった場合

毎回、いろいろな手法があるなーと思うんです。

RDBごとに性能も変わるので、試してみるしかない。

・Group byのmaxを使う

・降順でソートして、Limit 1 や分析関数の row_number() を使う

・最大値のカラムに対して、条件を指定する xxx = select max(yyy) / xxx In select max(yyy)

・existsを使う(not exists の場合は、 b.create_date > a.create_date のように、existsの場合は、 b.create_date < a.create_date)

以下、いろいろな手法記載されているURLを集めました

http://www.risewill.co.jp/blog/archives/3483

http://labs.timedia.co.jp/2014/10/selecting-max-record-in-group-by.html

http://qa.atmarkit.co.jp/q/1847

http://qiita.com/nogitsune413/items/f413268d01b4ea2394b1

http://lightgauge.net/database/sqlserver/1672/

http://www.oracle.co.jp/forum/message.jspa?messageID=35028967

https://oshiete.goo.ne.jp/qa/1274959.html

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q127773347

  • 別の観点
    • 中規模くらいのシステム、レコード数が 数千万〜、億を超えるくらい
      • View等で定義して、個々のロジックで異なることが少なくなるようにしてください
      • Viewを設計・メンテナンスするのは、DBA or DB回りの人が行ってください
      • チューニングが必要になった場合には、Viewのメンテナンスで対応できます
      • Oracle、PostgreSQLのマテリアライズド・ビューを利用する場合は、リフレッシュを考えてください、高速リフレッシュで対応できることが前提です。
        • 1日数回程度のリフレッシュすれば良いのであれば、完全リフレッシュでも良いかもしれません。
    • データ量が1億レコード超えてくるような場合だと、非常に遅くなります

そのような場合の1つの打開策として、最新を管理するテーブルを別に用意します。

価格情報テーブル
  ID(シーケンスみたいな値)
 商品ID
 日付
 価格

価格情報管理テーブル
  最新ID価格情報テーブル.ID
 商品ID

として、価格情報管理テーブル.最新のIDから、価格情報テーブル.ID をたどるようにします。

これだと、INNER JOIN で比較的速くなります。

注意点は、価格情報テーブルにトリガーを仕掛け、価格情報管理テーブルに反映するのは、どうしようも無い時の最終手段と考えてください。

トリガーは、見通しを非常に悪くします。再コンパイルが必要になる場合があります。アプリ側のロジックで吸収してください。

トラックバック - http://d.hatena.ne.jp/kuniku/20170314

2017-03-10 Mac で 特定のポート使っているプロセスを確認

netstat はコマンド表示結果遅いし、プロセスIDわからないしって調べた結果

17:34 |  netstat はコマンド表示結果遅いし、プロセスIDわからないしって調べた結果を含むブックマーク

http://qiita.com/tksmaru/items/d4951b5394aeee8c3cbc

のように

tomcat8080使っているのプロセス特定

$ lsof -n -P -i:8080
COMMAND  PID      USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
java    1050 xxx   39u  IPv6 xxx      0t0  TCP *:8080 (LISTEN)

1050がpidなので、これをkill

kill-9 1050

cenots7 setup ローカルの試し用環境の作成

17:34 |  cenots7 setup ローカルの試し用環境の作成を含むブックマーク

セットアップインストール

 言語日本語 > Japaneseを選択

 

 ソフトウェア選択

  最小限のインストールから変更

  

  ベース環境で   GNOME Desktop を選択

  開発ツール

  互換ライブラリ

  を選択

 

ネットワークホスト名で

  ホスト名を、xxxを入力

 

 enp0s3 IPv4を オンにする、IPv6はオフのまま

--> インストール開始 、最小限の構成ではないため、ちょっと時間かかる。

  最小限だと、数分で終わるくらい。

  選択した場合は、15−30分くらいだったかな・・・。

インストールの最後で、

--> 再起動 を行う

その後、ライセンス同意

Gnome入れたので、GUIの画面が表示される、Gnome入れていない場合は、コンソールで選択

言語キーボード選択

後は、必要に応じて。

初期設定

http://qiita.com/emabust/items/eb0ece84e074cca8fef1

$:ユーザ

#:root

$su -
# usermod -G wheel [一般ユーザー名]

$ sudo yum -y update

トラックバック - http://d.hatena.ne.jp/kuniku/20170310

2017-02-13 このエントリーを含むブックマーク

トラックバック - http://d.hatena.ne.jp/kuniku/20170213

2016-10-25

トラックバック - http://d.hatena.ne.jp/kuniku/20161025

2016-09-30

Windows10のWindowsUpdateにてネットワークに繋がらなくなる(9/29update分あたり)

| 21:52 | Windows10のWindowsUpdateにてネットワークに繋がらなくなる(9/29update分あたり)を含むブックマーク

なげーなげーWindowsUpdate(1時間くらい)が行われたと思ったら

Thinkpad X220Windows 10 Home がWifi物理LANのどちらも繋がらない、最悪ですわ。

おそらく、「Windows 10 Anniversary Update」ってやつの何か問題にあたってしまったんだろう。

OS再起動Wifiルーター再起動Wifiで設定し直しても駄目。

物理LANケーブルで接続してもダメ。

``DNSが見つからない`` っぽい感じもしている。

DHCPで割り当てしているが、ipconfig コマンドだと ipv4が 192.168.0.5 で表示される。

おそらく Windows Update前のIPは付いているというか、残ってる???

わかんないから、復元ポイントに戻そうとしたら、

Cドライブ復元ポイントは一切作成するようになっていなかった。

がーーん。

コントロールパネルさわってたら、回復→「以前のビルドに戻す」というのがあった。

ひとまず、試してみるか、で、戻してみたら、ネットワーク復活した。


以前のビルドに戻す(以前のバージョンに戻す)の参考

http://pc-karuma.net/windows-10-anniversary-update-roll-back-previous-version/


でも、困ったな、、、 エディションがprofessionalではないから

Windows Update無効にできない。

あと2台のうち、1台はWindows7のまま使い続けて、もう1台はWindows10のproなのでグループポリシーだかセキュリティポリシーあたりで

アップデート無効にしている。



追記

Windows 10 を再インストールしてから、ドライバー更新一時的に止める方法

https://support.microsoft.com/ja-jp/kb/3073930

http://freesoft.tvbok.com/win10/driver-auto-install-invalid.html


Windows10のKB3194496で問題発生

http://freesoft.tvbok.com/cat97/2016/windows10_kb3194496.html

Windows10に KB3197356配信。一部の修正のみで更新プログラムが遅い、失敗する問題は引き続き継続中か?

http://freesoft.tvbok.com/cat97/2016/windows10_kb3197356.html

http://freesoft.tvbok.com/win10/trouble_shoot_list_2016_08.html

でゅあんでゅあん 2016/10/15 06:17 おはようございます。

僕も、あの長ーいアップデートからイーサネットとの接続がおかしくなりました。
電源を入れる「繋がらない」→再起動する「繋がる」なのです(笑)

こちらを拝見し、「以前のビルドに戻す」なるものがあることを知り、試してみることにしました。

スタートメニューなども使いにくくなっていますし!(個人の感想です)
なんだか起動時間も増えたんですよね。

でゅあんでゅあん 2016/10/15 07:18 「設定」→「更新とセキュリティ」、「Windows Update」の「詳細オプション」にある「アップグレードを延期する」をチェックすると、アニバーサリーアップデートとやらが入らずに済むかも知れません。
詳細情報によると、「セキュリティ更新プログラム」への影響はない、とのことなので。
その代わりに新機能と縁遠くなるみたいです。

戻した後、チェックしてみたばかりなので、効果があるかは未知数なのですが。

kunikukuniku 2016/10/24 06:35 でゅあん さん>
情報提供ありがとうございます。

ここ1週間くらい(10/11-22)の間に、windows updateがあり、それが自動的にアップデートされた状態では、wifiは動いています。
LANポートは、確認できていませんが。

2016 年 10 月 11 日にリリースされた更新プログラム (KB3194798)  が適用されていると解消されていると想定。

トラックバック - http://d.hatena.ne.jp/kuniku/20160930