[pgsql-jp: 38712] Re: その日の価格を一覧から取り出す

藤澤 qsecofr1 @ hotmail.com
2007年 8月 31日 (金) 14:02:10 JST


藤澤です。

「2/16 が開始日と終了日の間にあるレコードの内、価格が最小のもの」
と考えると書けませんか?

検証してませんが、こちらでどうでしょう?
    --------------------------------------------
    SELECT 
        MIN(価格)
    FROM
        t_kakaku
    WHERE
        商品CD  =  'A001'               AND
        開始日  <= '2007-02-16'::date   AND
        '2007-02-16'::date <= 終了日 ;
    --------------------------------------------


/藤澤



On Fri, 31 Aug 2007 14:03:45 +0900 (JST)
Atsushi NISHIMURA <a2c @ lets-heart.co.jp> wrote:

> 西村です。
> 毎度利用させていただいてます。
> 
> 期間中のある1日の一番安い価格を一覧から取り出したいのですが、
> どうDMLを書けばよいのか頭を悩ましてます。
> 
> こういうテーブルとレコードを入れています。
> 
> create table t_kakaku(
>  商品CD   varchar(13) ,
>  価格         numeric(12,2) ,
>  開始日       date ,
>  終了日       date
> );
> 
> 商品CD  価格   開始日   終了日
> -------+------+------------+-----------
> A001   , 100  , 2007-01-01 ,2007-03-31
> A001   , 150  , 2007-02-01 ,2007-02-28
> A001   ,  50  , 2007-02-15 ,2007-02-17
> A001   ,  10  , 2007-02-15 ,2007-02-17
> 
> 
> 調べたいのは、2007-02-16当日の一番安い価格とします。
> 目でみたら最下段の 10円がそれに該当するのですが、
> ここまでやってみました。
> 
> select
>   vt.商品cd ,min(vt.期間) ,min(vt.価格)
> from (
>   selecr
>     age('2007-02-16'::date ,開始日) as 期間 ,
>     商品cd ,価格
>   from
>     t_kakaku
>   group by
>     期間 ,商品cd ,価格
> ) as vt
> where
>   vt.商品cd = 'A001'
> group by
>   vt.商品cd;
> 
> これだと、その商品cd「A001」のもので「期間」が一番小さい値と、
> 「価格」の中で一番小さな値が表示されます。
> 
> 「指定した日付はこの範囲内にある」 という風にみるには
> どのようにしたらよいでしょうか?
> 
> なにかヒントなどありましたらご教授のほど、よろしくお願いいたします...






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