- ベストアンサー
PostgreSQLでの構文求む
- PostgreSQLでの構文について教えてください
- データから指定した範囲の結果を取得したいです
- SQLの勉強ついでに教えてください
- みんなの回答 (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 で、行けますでしょうか?
その他の回答 (1)
- erupi1973
- ベストアンサー率75% (27/36)
間違ってたらごめんなさい。 性能面とかまでちゃんと考慮していないのですが.... 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 くらいでうまくいかないでしょうか?
補足
ありがとうございます。 ほしいデータを取得できました。 同時に理解も深まってきました。 補足をつけてもう一つお願いしたいのですが、 このデータは日を増すごとに新しい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とは違うので考え方も難しいです(@@
お礼
本当にありがとうございます。 このソースのselect a.ui as uiを select b.ui as uiに変更したら、 途中追加のuiも表示されて、できました! 同時に勉強にもなりました。 SQLのカテゴリもあるのを今発見したので、 次回からはそちらのほうへ投稿します^^;