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

Minoru Fukuda fukuda @ kinol.co.jp
2002年 2月 27日 (水) 16:21:53 JST


こんにちは、福田@キノルインタラクティブです。

SELECT分の使い方についてお聞きしたいので、Postgresとは
直接関係ないかもしれないのですが、結果によってはPostgres独自の
関数を使うのかな。と思いポストしました。

質問はあるテーブルの中のレコードのうち、条件に一致するレコードを
ひとつだけ取り出すというものなのです。

/* 顧客テーブル
*/
CREATE TABLE kokyaku_table (
	kokyakuid	serial,
	namae		text
);

COPY kokyaku_table FROM stdin;
1	'Aさん'
2	'Bさん'
3	'Cさん'
\.

/* 来店テーブル
*/
CREATE TABLE raiten_table (
	raitenid	serial,
	kokyakuid	int4,
	hizuke		timestamp,
	tenpomei	text
);

COPY raiten_table FROM stdin;
11	1	2002-1-27 16:02:0+09	'本店'
12	1	2002-3-27 12:02:0+09	'駅前店'
13	1	2002-3-27 16:02:0+09	'駅前店'
14	2	2002-3-28 16:02:0+09	'本店'
15	2	2002-3-29 16:02:0+09	'本店'
\.

というテーブルとレコードがあるときに、顧客の最後の来店日を表示する View を
作るときは...

CREATE VIEW saishuu_raiten_view 
AS
SELECT k.kokyakuid, k.namae, r.hizuke
FROM kokyaku_table as k
INNER JOIN 
(SELECT MAX(hizuke) AS hizuke, kokyakuid FROM raiten_table GROUP BY kokyakuid) AS r 
ON k.kokyakuid=r.kokyakuid;

で、結果は

# SELECT * FROM saishuu_raiten_view;

 kokyakuid | namae     |         hizuke
-----------+-----------+------------------------
         1 | 'Aさん'   | 2002-03-27 16:02:00+09
         2 | 'Bさん'   | 2002-03-29 16:02:00+09
(2 rows)

ここで質問なのですが、下のように顧客の最終来店日と
そのときの tenpomei を表示する view を作るとすると
どのような形になるのでしょうか?

 kokyakuid | namae     |         hizuke         | tenpomei
-----------+-----------+----------------------------------
         1 | 'Aさん'   | 2002-03-27 16:02:00+09 | '駅前店'
         2 | 'Bさん'   | 2002-03-29 16:02:00+09 | '本店'
(2 rows)

長々としたメールになってしまいましたが、よろしくお願いします。

-- 
福田稔 Minoru Fukuda
fukuda @ kinol.co.jp
kinol interactive inc.
http://www.kinol.co.jp



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