一部のユーザー (IdUser で識別される) がさまざまなクエリを使用してAccessTblテーブルから行ったアクセスの最も古い (または最近の) 日付であるアクセス コード (IdAccess) を取得する方法を知る必要があります。各ユーザー。
CREATE TABLE AccessTbl (
IdAcess VARCHAR(16) UNIQUE NOT NULL,
IdUser VARCHAR(16) NOT NULL,
TheDate DATE NOT NULL
);
INSERT INTO AccessTbl (IdAcess, IdUser, TheDate) VALUES
('A00', '0', '1983-12-30'),
('A01', '0', '2004-09-09'),
('A02', '1', '2013-02-01'),
('A03', '1', '2012-05-09'),
('A04', '2', '1983-12-30'),
('A13', '2', '2013-03-01'),
('A05', '2', '2004-09-09'),
('A06', '3', '2013-02-01'),
('A07', '3', '2012-05-09'),
('A08', '4', '1983-12-30'),
('A09', '4', '2004-09-09'),
('A10', '5', '2013-04-01'),
('A12', '5', '2013-03-01'),
('A11', '5', '2012-05-01');
例:
ユーザ 5 の最新は「A10」で、最も古いのは「A11」です ユーザ 4 の最新は「A09」で、最も古いのは「A08」です
ただし、1 つのクエリだけですべてのユーザーのすべての最新の日付が必要です。
私は...
SELECT IdAcess, IdUser, TheDate
FROM AccessTbl
WHERE (
TheDate IN (SELECT MAX(TheDate) FROM AccessTbl GROUP BY IdUser)
) GROUP BY IdUser;
しかし、私は持っています:
+---------+--------+
| IdAcess | IdUser |
+---------+--------+
| A01 | 0 |
| A02 | 1 |
| A05 | 2 | //BAD!!!!! must be A13
| A06 | 3 |
| A09 | 4 |
| A10 | 5 |
+---------+--------+
6 rows in set (0.13 sec)
後で、私は試しました:
IdUser による AccessTbl GROUP から IdAcess、IdUser、MAX(TheDate) を選択します。
持っている...
+---------+--------+--------------+
| IdAcess | IdUser | MAX(TheDate) |
+---------+--------+--------------+
| A00 | 0 | 2004-09-09 | //Must be A01
| A02 | 1 | 2013-02-01 |
| A04 | 2 | 2013-03-01 | //Must be A13
| A06 | 3 | 2013-02-01 |
| A08 | 4 | 2004-09-09 | //Must be A09
| A10 | 5 | 2013-04-01 |
+---------+--------+--------------+
6 rows in set (0.00 sec)
貴重なご協力ありがとうございます。
アン