アプリ版:「スタンプのみでお礼する」機能のリリースについて

もしかしたらすごく簡単なことかもしれませんが、
教えて下さい。
以下のテーブルから、date1もしくはdate2が最新の日付のデータを取得するSQL文の書き方がわかりません。
(以下の例では、bbbが取得したい)

name date1 date2
---- -------- ----------
aaa 20041110 (NULL)
---- -------- ----------
bbb (NULL) 20041111
---- -------- ----------
ccc 20041109 (NULL)
---- -------- ----------
ddd (NULL) 20041109
---- -------- ----------

# 図がずれてわかりづらいかと思いますが...

date1,date2でそれぞれmaxでname取得後に比較するしかないのでしょうか?
環境は、Redhat9+Postgresql-7.3です。

A 回答 (3件)

この例では、必ずdate1かdate2のどちらかにしか日付は入らず、もう片方はNULLになるのでしょうか?


だとすれば、もう少し簡単になると思いますが、それを保証しないものとしてみます。

あと、postgresql本体での検証はできてないので、参考としてください。

select top 1 * from table
order by
case
when coalesce(date1, '1999-01-01') < coalesce(date2, '1999-01-01') then date1 else date2 end desc

もし、どちらかが必ずNULLなら、
select top 1 * from table
order by
case when coalesce(date1, date2) end desc
で、いけると思います。

この回答への補足

topというものが、どうもうまくいきません。
Postgresqlのページを見ても、使い方がよくわからないのですが、どういったものなのでしょうか?
# イメージ的には、先頭の1つのみデータを表示するような感じですが。。。

あと、date1,date2のどちらかが必ずNULLと考えていますが、今後変わる可能性はあるので、必ずしもNULLではないと思っていただいてOKです。

補足日時:2004/11/12 22:25
    • good
    • 0

select max(dateall) from (select date1 as dateall from table_name union select date2 as dateall from table_name) as temp;



date1 と date2 を取得結果を union でくっつけてから最大値を取得するのはどうでしょうか?


列名に別名をつけてるのは私がわかり易くするためで以下でも date1 と date2 の最新を取得できると思います。

select max(date1) from (select date1 from table_name union select date2 from table_name) as temp;
    • good
    • 1

回答No.1の


topはMS-ACCESSでの関数です。
このtopと同様のことを実現するのが、OFFSET、LIMITです。
以下のURLを参考にしてみてください。

参考URL:http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す