• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PostgreSQLでの構文求む)

PostgreSQLでの構文求む

このQ&Aのポイント
  • PostgreSQLでの構文について教えてください
  • データから指定した範囲の結果を取得したいです
  • SQLの勉強ついでに教えてください

質問者が選んだベストアンサー

  • ベストアンサー
  • erupi1973
  • ベストアンサー率75% (27/36)
回答No.2

またしても間違っていたらごめんなさい。 動かしてみてはいないもので。 select a.ui as ui, b.total-coalesce(a.total,0) as total from ( select ui, total from date_ui_total where date = '2005-11-02' ) b left join ( select ui, total from date_ui_total where date = '2005-11-01' ) a on a.ui = b.ui で、行けますでしょうか?

koooosuke
質問者

お礼

本当にありがとうございます。 このソースのselect a.ui as uiを select b.ui as uiに変更したら、 途中追加のuiも表示されて、できました! 同時に勉強にもなりました。 SQLのカテゴリもあるのを今発見したので、 次回からはそちらのほうへ投稿します^^;

その他の回答 (1)

  • erupi1973
  • ベストアンサー率75% (27/36)
回答No.1

間違ってたらごめんなさい。 性能面とかまでちゃんと考慮していないのですが.... select a.ui as ui, b.total-a.total as total from ( select ui, total from date_ui_total where date = '2005-11-01' ) a, ( select ui, total from date_ui_total where date = '2005-11-02' ) b where a.ui = b.ui くらいでうまくいかないでしょうか?

koooosuke
質問者

補足

ありがとうございます。 ほしいデータを取得できました。 同時に理解も深まってきました。 補足をつけてもう一つお願いしたいのですが、 このデータは日を増すごとに新しいuiが増えることがあるのです。 上記の式の場合、「where a.ui = b.ui」ですので昔に存在するものは表示しますが、 b.uiは存在して、a.uiには存在しないデータの取得も出来ますでしょうか? WHERE a.ui = b.ui OR b.ui NOT IN (a.ui) これでテストしてみたところORの右側に全部引っかかります。 WHERE a.ui = b.ui OR b.ui NOT IN (SELECT * FROM hist_cntv_t WHERE date = '2005-11-01') これでやると11-01と11-02のデータが表示されてしまいます。 INをうまく使えるといい感じに取得できると思うのですが…やはりPHPやCとは違うので考え方も難しいです(@@

関連するQ&A