私はここで同様のタイプの質問を見ましたが、どれも私の状況を助けませんでした。IDと最新の日時によるMySQLグループ
私は、テーブルには(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)は日付ごとに最新のdatetimeを与えません。そのうち
SELECT *
FROM Test
WHERE TUserID = 123
GROUP BY TData
ORDER BY TViewedAt
戻って2行をそれらの行のどれが最新ではない:
は、ここに私のクエリです。
おかげでたくさん
はい、その作業は非常にシンプルで簡単にありがとうございます – Giorgi
ようこそ、喜んで –
これを行う方法がありますそれはより効率的です、すなわち、サブクエリを必要としないのですか?私はそれが私のサーバを殺していることを発見しています – Jason