12


7

私はこのテーブルを持っています:

画像:https://i.stack.imgur.com/DgNWx.png [代替テキスト]

そして、それぞれの deal_id`に対して最も高い timestamp`、*と対応する status_id *を持つ行を返すようなリクエストをしたいと思います。

したがって、この例では、2行返したはずです。

1226、3、2009-08-18 12:10:25 1227、2、2009-08-17 14:31:25

私はこの質問でそれをやろうとしました

SELECT deal_id、status_id、max(タイムスタンプ)FROM deal_statusからGROUP BY deal_id

しかしそれは間違った `status_id`を返すでしょう:

1226、1、2009-08-18 12:10:25 1227、1、2009-08-17 14:31:25

2 Answer


15


主キーフィールドが1つもない場合は、次のようにします。

deal_status.deal_id = ds.didおよびdeal_status.timestamp = ds.tsに対して、deal_status内部結合から*を選択します(did_idatによるdeal_statusグループからtsとして、deal_idを選択し、max(timestamp)を選択)。

あなたが同時に同じ製品に対して2つの異なるステータスを持つことを許可した場合、これはまだうまくいきません。


0


こんにちは私はこれがあなたがそれを望むものを与える願っています

deal_status.deal_id = ds.didおよびdeal_status.timestamp = ds.ts order by deal_idで、deal_status内部結合からdeal_id、status_id、タイムスタンプを選択します(did_idatで、deal_statusグループからtsとしてdeal_idを選択し、max(timestamp)を選択)。