前提・実現したいこと
現在下記のようなテーブルが存在しております。
テーブル・・・
ID |名前|日付
01|田中|3/16
02|田中|3/15
03|田中|3/14
04|山田|3/17
05|山田|3/16
06|鈴木|3/15
07|鈴木|3/14
・・・
名前が田中かつ日付が3/15日以前で最新を1件
名前が鈴木かつ日付が3/14日以前で最新を1件
上記のような検索を実行し、下記の結果を得たいと考えております。
ID |名前|日付
02|田中|3/15
07|鈴木|3/14
試したこと
SELECT *
FROM テーブル AS テーブルA
INNER JOIN (SELECT 名前,MAX(日付)AS 最新日付 FROM テーブル
WHERE (日付 <= ‘2021-03-15 00:00:00’ AND 名前 = ‘田中’)
GROUP BY 名前 AS テーブルB
ON テーブルA.名前 = テーブルB.名前
AND テーブルA.日付 = テーブルB.最新日付
ーーー
上記のような形で一応取ってくることはできましたが、
かなりスピードが遅く困っております・・・
SQLに関する理解不足で読みにくいSQLになってしまい大変失礼ですが、
この場合の正しいSQLの書き方についてご回答をお願いしてもよろしいでしょうか。
また、もし可能であれば1回のSQLで
名前が田中かつ日付が3/15日以前で最新を1件」「名前が鈴木かつ日付が3/14日以前で最新を1件」
を同時に抽出する方法などありますでしょうか。
すみませんがどうぞよろしくお願いします。
回答3件
あなたの回答
tips
プレビュー