アプリ版:「スタンプのみでお礼する」機能のリリースについて

現在下記のようなテーブルが存在しております。

テーブル・・・
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件」
を同時に抽出する方法などありますでしょうか。

すみませんがどうぞよろしくお願いします。

A 回答 (1件)

select id,名前,日付


from テーブル
where 名前 = '田中' and 日付 <= date '2021-03-15'
order by 日付 desc limit 1
union all
select id,名前,日付
from テーブル
where 名前 = '鈴木' and 日付 <= date '2021-03-14'
order by 日付 desc limit 1
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A