我希望获取 select 语句内 select 语句的最新日期。我使用的是Hibernate,所以普通MySQL有一些限制,例如不能在from区域或MAX内部使用select语句。
这是一个测试结构:
CREATE TABLE User (
username varchar(20) NOT NULL PRIMARY KEY,
locationId int(10) NOT NULL
);
CREATE TABLE UserRecords (
id int(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
username varchar(20) NOT NULL,
recordDate datetime NOT NULL
);
INSERT INTO User VALUES ('test',1);
INSERT INTO User VALUES ('test2',2);
INSERT INTO User VALUES ('test3',1);
INSERT INTO UserRecords VALUES (null,'test','2018-02-10 14:29:40');
INSERT INTO UserRecords VALUES (null,'test2','2018-03-11 12:21:10');
INSERT INTO UserRecords VALUES (null,'test3','2018-05-18 11:11:15');
INSERT INTO UserRecords VALUES (null,'test','2018-06-20 16:58:50');
这就是我所追求的并且经常工作,但在 Hibernate 中不起作用:
SELECT
u.locationId,
MAX(
SELECT
MAX(ur.recordDate)
FROM
UserRecords
WHERE
ur.username=u.username
)
FROM
User u
GROUP BY
u.locationId
我能得到的最接近的结果是仅列出每个用户的最大日期,然后必须解析它们。
SELECT
u.locationId,
GROUP_CONCAT(
CONCAT('''',
SELECT
MAX(ur.recordDate)
FROM
UserRecords
WHERE
ur.username=u.username
, '''')
)
FROM
User u
GROUP BY
u.locationId
这确实很简单,但希望你能明白。
最佳答案
看起来您正在尝试获取每个位置 ID 的最大记录日期,这可以通过加入嵌套子查询来实现
位置 ID 的最长记录日期
SELECT
u.locationId,
Max(urRecordDate.maxRecordDate)
FROM User u
INNER JOIN
(SELECT
ur.username,
MAX(ur.recordDate) AS maxRecordDate
FROM UserRecords ur
GROUP BY ur.username) AS urRecordDate
ON u.username = urRecordDate.username
GROUP BY u.locationId
用户最大记录日期和locationId
SELECT
u.locationId,
urRecordDate.maxRecordDate
FROM User u
INNER JOIN
(SELECT
ur.username,
MAX(ur.recordDate) AS maxRecordDate
FROM UserRecords ur
GROUP BY ur.username) AS urRecordDate
ON u.username = urRecordDate.username
关于mysql - 如何获取行组的最大日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51991314/