繁体   English   中英

SQL 从一个表中查找所有记录,但仅从链接表中查找最近的记录

[英]SQL find all records from one table, but only the most recent record from a linked table

我正在查找 select 我的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

您可以使用 window 函数:

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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM