[pgsql-jp: 24997] Re: レコードをひとつだけ取り出すViewの作り方

Mashiki mashiki @ yanah.com
2002年 2月 27日 (水) 17:57:26 JST


 Mashikiです。

シリアルのraitenidが時系列の正しさを保証するなら

select kokyakuid, namae, hizuke, tenpomei
from (
	select max(raitenid) as raitenid
	 from raiten_table
	 group by kokyakuid
) R0
join raiten_table R using(raitenid)
join kokyaku_table K using(kokyakuid)
;

とすれば、悩みはないと思いますがどうでしょ。

R0とRをJOINしてRを顧客でユニークにして後は普通に
Kとつなげます。


>こんにちは、福田です。
>
>加藤さん、どうもありがとうございました。
>
>教えていただいた方法は、私も考えてみたのですが、
>おっしゃるとおり「同一時間というデータが発生したら?」と
>いう問題があり、どうも釈然としないものがあります。
>
>実際に格納されるレコードでは、「同一時間」というのは
>ありえませんが、もうすこし格好いい SELECT 文が書けないかなあと
>悩んでいたのです。
>
>
>h-kato @ hokkaido.nsc-kk.co.jp wrote:
>> 
>> こんにちは。加藤です。
>> 
>> > ここで質問なのですが、下のように顧客の最終来店日と
>> > そのときの tenpomei を表示する view を作るとすると
>> > どのような形になるのでしょうか?
>> >  kokyakuid | namae     |         hizuke         | tenpomei
>> > -----------+-----------+----------------------------------
>> >          1 | 'Aさん'   | 2002-03-27 16:02:00+09 | '駅前店'
>> >          2 | 'Bさん'   | 2002-03-29 16:02:00+09 | '本店'
>> 
>> PostgreSQLを実行する環境を削除してしまったので未検証ですが、おそらく
>> このようなSQLとなるのでは?(SELECT部のみ抜粋)
>> 単純に、顧客ID毎に最大日付を取得しています。
>> 他に、考慮が必要そうな点として
>>  売上の無い顧客も対象とする?
>>  来店テーブルに同一顧客ID、同一時間というデータが発生したら?
>>  (家族会員が同じ顧客IDを使用しているケース等)
>> というように、条件によって多少変わりますが...
>> 
>> select
>>  k.kokyakuid,
>>  k.namae,
>>  r.hizuke,
>>  r.tenpomei
>> from kokyaku_table as k,raiten_table r
>> where
>>  (k.kokyakuid=r.kokyakuid) and
>>  (r.hizuke=(
>>   select max(r2.hizuke)
>>   from raiten_table r2
>>   where
>>    (r2.kokyakuid=k.kokyakuid))
>>  )
>> 
>> # 加藤
>
>-- 
>福田稔 Minoru Fukuda
>fukuda @ kinol.co.jp
>kinol interactive inc.
>http://www.kinol.co.jp



pgsql-jp メーリングリストの案内