- PR -

SQLでの最新日のデータの取得方法

投稿者投稿内容
忠犬
大ベテラン
会議室デビュー日: 2006/05/01
投稿数: 109
投稿日時: 2008-10-30 23:14
引用:

Java僧さんのおっしゃるGROUP BY と HAVINGを使った方法を知りたいです。



havingで条件指定できるのは、

(1)group byで指定した列
(2)max、countなどの集合(集計)関数
(3)定数
(4)外側のクエリで指定している列名や列の別名

だったと思うので、サブクエリを使ったKingさんの書き方になると思いますけど。

また、分析関数を使った場合、次のような書き方ができると思います。

コード:
select
  品番,  購入日, 単価
 from (select
         *,
         row_number() over(partition by 品番 order by 購入日 desc) as rn
        from 購入実績) as x
 where rn=1
 order by 品番

とんくま
ベテラン
会議室デビュー日: 2005/08/02
投稿数: 56
お住まい・勤務地: 東京
投稿日時: 2008-10-30 23:15
かつのりさん
引用:
自分もやんちさんや、Kingさんと同じく、
品番と最新日の組み合わせを、
サブクエリで用意する方法しか思いつきませんでしたが、...


同様な発想です。テストしていません。
コード:
SELECT 品番, 単価
  FROM 購入実績 AS a
 WHERE NOT EXISTS
       (SELECT *
          FROM 購入実績 AS b
         WHERE b.品番 = a.品番
           AND b.購入日 > a.購入日
       )
;


s_saku
会議室デビュー日: 2006/05/30
投稿数: 14
投稿日時: 2008-10-31 08:25
みなさま、大変お世話になります。
返事が遅くなり申し訳ありません。
また、
引用:

ただし品番と購入日がキーになると考えるとです。
同じ品番、購入日のレコードが複数ある場合はまた別の方法にしないといけないと思います。

(品番、購入日)の複合キーで、ユニークになるのでしょうかね?
そういったことも、事前に説明してください。




重要な内容が抜けておりましたこと、申し訳ありませんでした。
同じ品番、購入日のレコードが発生します。

返事が遅くなったこと、重要な条件が抜けていたこと、お詫びいたします。
King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2008-10-31 10:03
それでは同じ購入日に同じ品番に対して違う単価が複数発生した場合、
どうしたいのですか?
s_saku
会議室デビュー日: 2006/05/30
投稿数: 14
投稿日時: 2008-10-31 10:16
お世話になります。

引用:

Kingさんの書き込み (2008-10-31 10:03) より:
それでは同じ購入日に同じ品番に対して違う単価が複数発生した場合、
どうしたいのですか?



情報が小出しになっているようで申しわけありません。
品番、購入日が同じのレコードはありますが、品番、購入日が同じで、単価が異なることはありません。

このような集計をSQLで行うようなことはないのでしょうか?

King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2008-10-31 10:30
それじゃあ今までに皆さんに示してもらった SQL を少しいじればいいだけじゃないの?
さらに GROUP BY するとか DISTINCT するとか。
s_saku
会議室デビュー日: 2006/05/30
投稿数: 14
投稿日時: 2008-10-31 11:13
お世話になります。

引用:

Kingさんの書き込み (2008-10-31 10:30) より:
それじゃあ今までに皆さんに示してもらった SQL を少しいじればいいだけじゃないの?
さらに GROUP BY するとか DISTINCT するとか。



DISTINCTを使用して絞り込むことができました。
皆さん、いろいろとありがとうございました。
よっしー
大ベテラン
会議室デビュー日: 2007/05/17
投稿数: 143
投稿日時: 2008-10-31 13:09
私は、GROUP BYのサブクエリはあまり好きではないので。。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=46590&forum=26

スキルアップ/キャリアアップ(JOB@IT)