【问题标题】:SQL find all records from one table, but only the most recent record from a linked tableSQL 查找一张表中的所有记录,但只查找链接表中的最新记录
【发布时间】:2021-04-20 10:36:31
【问题描述】:

我希望从我的 userrecords 表中选择所有记录,然后从我的 checkins 表中找到相应的最新记录。

我需要这样做,以便我可以显示用户在当天和校园内是签到还是签出。

outdatetime 是用户当前签到时的 NULL 值,查询应考虑当前日期,以便仅考虑当前日期的签到记录。

我的餐桌设置是这样的:

CREATE TABLE `userrecords` (
`userid` int(11) NOT NULL AUTO_INCREMENT,
  `firstname` varchar(45) NOT NULL,
  `surname` varchar(45) NOT NULL,
  `email` varchar(45) NOT NULL,
  `phone` varchar(15) DEFAULT NULL,
  `password` char(64) DEFAULT NULL,
  `userlevel` int(1) NOT NULL,
  `suspended` varchar(1) DEFAULT NULL,
  `created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `lastcheckdate` datetime DEFAULT NULL,
  `maincampus` varchar(3) DEFAULT NULL,
  `lastlogin` datetime DEFAULT NULL,
  `staffid` varchar(6) DEFAULT NULL,
  PRIMARY KEY (`userid`),
  UNIQUE KEY `email_UNIQUE` (`email`),
  UNIQUE KEY `userid_UNIQUE` (`userid`)
) ENGINE=InnoDB AU

CREATE TABLE `checkins` (
  `recordid` int(11) NOT NULL AUTO_INCREMENT,
  `userid` int(11) NOT NULL,
  `campusid` int(11) NOT NULL,
  `indatetime` datetime DEFAULT NULL,
  `outdatetime` datetime DEFAULT NULL,
  PRIMARY KEY (`recordid`),
  KEY `campusid_idx` (`campusid`),
  KEY `userid_idx` (`userid`),
  CONSTRAINT `campusid` FOREIGN KEY (`campusid`) REFERENCES `campus` (`campusid`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `userid` FOREIGN KEY (`userid`) REFERENCES `userrecords` (`userid`) ON DELETE CASCADE ON UPDATE CASCADE

到目前为止,我的查询是: SELECT userid,firstname,surname,email,lastcheckdate FROM userrecords WHERE userlevel=0

【问题讨论】:

    标签: sql


    【解决方案1】:

    你可以使用窗口函数:

    select ur.*, c.*
    from userrecords ur left join
         (select c.*,
                 row_number() over (partition by userid order by indatetime desc) as seqnum
          from checkins c
         ) c
         on ur.userid = c.userid and ur.seqnum = 1;
    

    【讨论】:

      猜你喜欢
      • 2014-06-26
      • 1970-01-01
      • 1970-01-01
      • 2022-07-06
      • 1970-01-01
      • 1970-01-01
      • 2012-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多