mysql - 如何获取行组的最大日期

标签 mysql hibernate

我希望获取 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

using native SQL queries in hibernate

关于mysql - 如何获取行组的最大日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51991314/

相关文章:

MySQL 数据库结构 : 1 Device consists of multiple Components

java - Hibernate org.hibernate.MappingException ...关联..未映射的类- Manytomany

mysql - 将密码加密到 Spring3.1、Hibernate4 和 Jasypt1.90 的配置文件中不适用于 MySQL 服务器 5

MySQL:触发错误的模式

mysql - 检查引用完整性中断

hibernate - hbm.xml 文件中出现一些错误

java - 具有一对多关系的 Hibernate Criteria 搜索请求

java - 在 Hibernate 中使用 Cascade 时阻止更新或插入实体

mysql - 在 WHERE 子句中使用子查询结果列时出现未知列

mysql - 如何撤消刚刚执行的 mysql 语句?