私はお互いにかなり奇妙な関係を持つ3つのテーブルを持っていますが、データを取得しようとしていますが、 3つのテーブルは、基本的に次のとおりNULL(MySQL)のときの最新の結果を選択
- AはB.
- Bと1対多の関係を有するC.
「A」テーブルといくつかの対1の関係を有しています最も重要なスコープに関する情報があります。議論のために、テーブルAにあなたが持っていた仕事のリストなどが入っているとしましょう。 A.Id
がAの主キーです。
"B"テーブルには、 "A"テーブルに関連する事項に関する "スポットライト"デタリールが含まれています。 B.Id
がBの主キーである場合、イベントが発生した時刻を示すB.Timestamp
があり、それが参照する「A」を示すB.AId
の列があります。
これは物事が複雑になる場所です。 「C」テーブルには、の項目「B」に関連する情報が含まれています。本質的にはC.Bid
とC.Value
の2つの列があります。あなたはSELECT * FROM A JOIN B ON B.AId = A.ID LEFT JOIN C ON C.Bid = B.Id
した場合、あなたはこのようなものが残っているはずだ:
A.Id B.Id C.Value (... and other columns, of course...)
1 1 12
1 2 NULL
1 3 NULL
1 4 13
1 5 NULL
2 6 91
2 7 12
2 8 NULL
2 9 NULL
2 10 NULL
3 11 92
3 12 91
3 13 NULL
3 14 92
等...今
、私は私が得るのを助けることができ、「B」テーブル内のタイムスタンプを持っていますC.Value
がいつ変更されたかを理解していますが、 = 10のときに期待値C.Value
が見たい場合はどうなりますか?その中のデータに基づいて、私はを知っています正しい答えはまだC.Value = 12
なので変更されていないので、私はそれを可視化する良い方法がありません。
だから、何私が求めていることは、基本的には、基準としてB.Timestamp
を使用して私にA.Id, B.Id
と最新のnull以外のC.Value
を表示することができ、クエリを構築するための助けです。 IDは時々乱れることがありますが、タイムスタンプは常に正しいです。
ありがとうございます!
BからCを結合するインラインビューを作成し、Bから最大値(timeStamp)とAID値のみを返します。ここで、C.Valueはnullではありません。これをテーブルBのベースセットに戻します。これにより、Cの値がヌルでない最大タイムスタンプを持つA/Bレコードだけが得られます。 – xQbert
私が答えを出したとしましょう。それは最初にいくつかのビットを持ち、中間にいくつかのビットを持ち、終わりのビットを持っています。 https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-queryを参照してください。 – Strawberry
@xQbert ...そして魔法が起こり、突然私は見逃した 'C.Value'フィールドを何とかしていますか? ;-) –