スキーマとデータについて知っておくべきこと:
SELECT * FROM 'income'; -- Returns all 309 rows.
SELECT * FROM 'income' WHERE businessday_revision = 0; -- 308 rows
SELECT * FROM 'income' WHERE businessday_revision = 1; -- 1 row
営業日テーブルには次のものがあります。
id INTEGER,
revision INTEGER,
....
PRIMARY KEY(id, revision)
収入表には次のものがあります。
id -- integer primary key, quite unimportant I think
businessday_id -- FK
businessday_revision -- FK, when a day is edited, a new revision is created
外部キーは次のようになります。
FOREIGN KEY(businessday_id, businessday_revision) REFERENCES businessday(id, revision) ON DELETE CASCADE,
問題
各日の最新リビジョンからのみ収入を選択したい。これは 308 行である必要があります。 しかし、悲しいことに、私は密度が高すぎてそれを理解できません。これを使用して、すべての最新の営業日のリビジョンを取得できることがわかりました。
SELECT id, MAX(revision)
FROM businessday
GROUP BY id;
このデータを使用して収入を選択する方法はありますか? 次のようなもの:
-- Pseudo-code:
SELECT *
FROM income i
WHERE i.businessday_id = businessday.id THAT EXISTS IN
(SELECT id, MAX(revision)
FROM businessday
GROUP BY id);
ここでは明らかに手がかりがありません。正しい方向に向けてください!