« 2008年10月 | メイン | 2008年12月 »

2008年11月21日

重複している行から条件に一致した最初の一行を抽出したい(DISTINCT ON)

ログデータの集計などで、条件に一致した最初の一行(最初に現れた一行)のみ抽出したい場合が多々ある。普通であれば、自己結合・サブクエリーなどを使用するが、PostgreSQLであれば、「DISTINCT ON」を使った方が直感的にすっきり書けるし、パフォーマンスも(たぶん)いい(未検証)。

PostgreSQL 8.3.4文書 : SELECT

---
DISTINCT ON ( expression [, ...] )は各行集合の中で、指定した式が等しいと評価した最初の行のみを保持します。

(中略)

例えば、次の例は各地点の最新の気象情報を取り出します。

SELECT DISTINCT ON (location) location, time, report
    FROM weather_reports
    ORDER BY location, time DESC;
---

想定しているのは、このような一部データが欠落しているロギングデータ。location項目が重複しており、11時の時点の金沢のデータがないというのがやっかいだ。

locationtimereport
札幌9時はれ
東京9時くもり
金沢9時くもり
福岡9時あめ
札幌10時はれ
東京10時くもり
金沢10時あめ
福岡10時あめ
札幌11時くもり
東京11時あめ
福岡11時くもり

と紹介してみたものの、なかなか知識の適応は難しい...。頭の片隅でも、ということで。

余談になるが、サブクエリーも使えない場合の代替案としては、

(1)特定の制約がある項目を含んだ一時テーブルを作成して、INSERTしながら重複を抑制...。

(2)プログラム側のハッシュ配列で、既に任意条件であるキーが存在するか検査をして、重複を抑制...。

(3)ハッシュすら使わず、for文でループ回してif文で重複検査...。

うーん、(3)はリアルで見たことがあり、もう愕然としたのをよく覚えている。

2008年11月18日

在宅勤務のお供「BROOK'Sコーヒー」

在宅勤務とは言え、ある程度の味のコーヒーを自宅で飲むとすると、それなりの経費が積み重なってきます。そこでついにBROOK'S(ブルックス)
に手を出してみました。

注文から2,3日で到着。ものすごい量です。

ブルックスお試しセット

5種類入っているので、違いを比べるのも面白いですし、次の発注の参考にもなります。ちなみにユーロピアンブレンドは好みじゃなかった...。

お試しパックは75袋1,980円(送料無料)と非常にリーズナブル。スーパーで販売している10パックセットのコーヒーより安いし、断然おいしいです。ただ家にコーヒーが大量にあると、逆に消費量が増えてしまうこともありそうです。

オフィシャルのネットショップもありますが、こちらの楽天のショップの方が楽天ポイントも付くのでお得な感じです。

2008年11月17日

さくら=MySQL4.0系=サブクエリーが使えない

ちょっとした実験サーバーとして、さくらのレンタルサーバを使用しているのだが、提供されているMySQLサーバで、少しはまってしまった。

何度試してみても、サブクエリーを使ったSQLクエリーが文法エラーとなってしまうのだが、結局はMySQLのバージョンの問題。ゆとりエンジニアでサーセン。

MySQLサーバ:mysql35.db.sakura.ne.jp
バージョン:4.0.27

下記の項目がごっそりと使えない。

MySQL : 6.4.2. サブクエリ構文

オープンソースのCMSやSNSのソースコードで"ダッサイ実装"を見つけても、結局はサポートするDBの種類やバージョンを考えると、それが最適解であった、ということも多々ありますな。



2008年11月16日

RSSの細分化と読者の獲得

ネット上には読み応えのある連載記事が多々ある。しかし連載の続きが気になる(=わっふるわっふる)ものの、連載のトップページをブックマークしても、更新確認を忘れてしまうし、サイトのRSSを購読すると膨大な他の記事の更新にうんざり、というケースが多い。

有名なビジネス誌のネットサイトを良くできている順に並べると

(1)DIAMOND Online

→連載別のRSS

(2)東洋経済オンライン

→サブカテゴリごとのRSS

(3)NBonline(日経ビジネスオンライン)

→カテゴリごとのRSS

という感じだろうか。NBonlineに至っては、

・どのページのRSS Autodiscoveryも全体のRSSしか検知できない
・RSSの総合案内のページがない

というダメっぷり。たかがRSS、されどRSS。地道な仕組みが読者を獲得し、PVを増やすことに繋がるのかもしれない。

2008年11月10日

情報のパーソナライズを促進するドコモの新サービス

先日ドコモが新端末シリーズを発表した。902iシリーズの「iチャネル」以降、

903i・・・ワンセグ
904i・・・GPS, 2in1, 加速度センサー, うたホーダイ
905i・・・国際ローミング, HSDPA, カメラ/液晶ブランド

などここ数年は機能面の強化に力を入れてきたものの、今回は携帯電話を「情報端末」としてを見直し、生活情報の取得・配信をサポートする機能が強化された。

今回発表されたのは、プッシュ型の情報配信サービスの「iコンシェル」と、待ち受け画面カスタマイズ機能の「iウィジェット」。それぞれユーザーごとに情報を最適化してくれるのが特徴だ。

ケータイWatch : ユーザーの生活に役立つ情報を配信する「iコンシェル」
ケータイWatch : 時計や株価、検索などでカスタマイズ「iウィジェット」

地味に凄いなと思ったのが、iコンシェルの

---
アドレス帳データについては、NTTグループの強みを活かして「タウンページ」と照合し、アドレス帳データの中に店舗情報があれば、営業時間や定休日などタウンページ側の情報をアドレス帳データに自動追記する。
---

という機能。利用者の保存データから勝手に情報をマッシュアップしていくという、Web2.0のようなサービス。このようなメタデータ(今回は電話番号)の取り込みは、今後ドコモがエージェントサービスを強化していく方針ならば、さらに拡大していくものと思われる。

ただ、せっかくコンテンツプロバイダーが揃っている有用なサービスにも関わらず、PCとの連動や同期ができないのが残念。相変わらず、携帯で完結する世界を作り上げてしまっている。

例えばPCのデスクトップのガジェットとの状態の同期や、PC・他のPDAへの情報配信も追加有料サービスでも行ってくれれば、もっと良い情報提供ソリューションができるのではないかと思う。このサービスに限らず、iPhoneのPCとの親和性を目の当たりにすると、そのようなユーザーからの要求も今後高まってくるのではないだろうか。

もう一つ微妙だなと思ったのが、iチャネルに続き、iコンシェルが実質オープンではない点。面白いプラットフォームなので、ぜひ一般の開発者に開放して欲しい。iウィジェットはJAVAが採用され、非公式サイトにも開放する方向のようだ。とは言え、たかがウィジェットなのにJAVAかぁ、と気が重いが。