私はここで同様のタイプの質問を見ましたが、それらのどれも私の状況を助けませんでした。
テストと言うテーブルがあります(mysql MyISAMを使用)
テストには次のスキーマがあります。
TID INT PRIMARY KEY AUTO_INCREMENT
TData varchar (data that i want to select)
TUserID INT (this will be joined with users table, same users can have many records here)
TViewedAt DATETIME (records each time user visits page, datetime format)
これで、現在ログインしているユーザーがテストページにアクセスするたびに、アクセスしたユーザーIDを記録するレコードがこのテーブルに追加され、ユーザーがアクセスしたデータと日時がTIDで毎回自動的にインクリメントされます。
次に、バックエンド管理ページがあり、どのユーザーがテストページにアクセスしたか、何回、データをいつ表示したかを確認できます。基本的に、最新の20〜25行のリストを含むテーブルです。私のクエリは、データごとに1つのレコードのみを選択する必要があります。ユーザーのデータは同じでも時間は異なりますが、ユーザーごとに最新のデータを1つだけ選択したいと思います。したがって、ユーザーがテストページに10回アクセスした場合、10個のレコードがデータベースに送信されますが、テーブルには最新の1個のレコードしか表示されません。別のユーザーがページに15回アクセスすると、この2番目のユーザーの1つのレコードが再び表示されるため、合計で2つの行がテーブルに表示されます。すべてが機能するようになりましたが、何らかの理由でGROUP BYが実行され、MAX(date)によって各日付の最新の日時が表示されません。
これが私の質問です:
SELECT *
FROM Test
WHERE TUserID = 123
GROUP BY TData
ORDER BY TViewedAt
2行を返しますが、そのうち最新の行はありません。
どうもありがとう