mysql - 选择表中每对 2 行的日期时间

标签 mysql sql

假设我有以下两个表:

CREATE TABLE `playerjoins` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `globalId` int(11) NOT NULL,
  `date` datetime NOT NULL,
  `serverId` int(11) NOT NULL,
  `playerId` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `globalId` (`globalId`),
  KEY `date` (`date`),
  KEY `serverId` (`serverId`),
  KEY `playerId` (`playerId`),
  CONSTRAINT `playerjoins_ibfk_1` FOREIGN KEY (`serverId`) REFERENCES `servers` (`serverId`),
  CONSTRAINT `playerjoins_ibfk_2` FOREIGN KEY (`playerId`) REFERENCES `players` (`playerId`)
) ENGINE=InnoDB AUTO_INCREMENT=64983 DEFAULT CHARSET=latin1

CREATE TABLE `playerleaves` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `globalId` int(11) NOT NULL,
  `date` datetime NOT NULL,
  `serverId` int(11) NOT NULL,
  `playerId` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `globalId` (`globalId`),
  KEY `date` (`date`),
  KEY `serverId` (`serverId`),
  KEY `playerId` (`playerId`),
  CONSTRAINT `playerleaves_ibfk_1` FOREIGN KEY (`serverId`) REFERENCES `servers` (`serverId`),
  CONSTRAINT `playerleaves_ibfk_2` FOREIGN KEY (`playerId`) REFERENCES `players` (`playerId`)
) ENGINE=InnoDB AUTO_INCREMENT=45676 DEFAULT CHARSET=latin1

并且,首先,我想选择每一对行,按 date ASC, globalId ASC 排序。

我将如何执行该查询?此外,对于信息,我想使用它来获取(伪代码)row1.datetime, row2.datetime 并在我的查询中的其他地方再次使用它。

示例数据,使用一些更抽象的对象表示法:

假设以下是特定玩家的结果数据:

  • 玩家加入_1
  • Playerleave_1
  • 玩家加入_2
  • Playerleave_2

然后我想创建以下行作为(子)查询的输出:

  • (玩家加入_1,玩家离开_1)
  • (玩家加入_2,玩家离开_2)

最佳答案

这会让你们更亲近吗?

SELECT * FROM
playerjoins pj
LEFT JOIN
playerleaves pl
ON( pj.playerId = pl.playerId AND pj.serverId = pl.serverId AND pj.date <= pl.date )
GROUP BY pj.playerId, pj.serverId;

这将为您提供 playerleaves 表的任意行。 鉴于当前的数据库结构,您将需要编写一个存储过程,这显然比单个查询工作更多。

我建议您更改数据库结构(如果可能)。

我的建议是去掉 playerleaves 表并在 playerjoins 表中添加 leaveDate 列。

希望这对您有所帮助!

关于mysql - 选择表中每对 2 行的日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20223310/

相关文章:

sql - 在 TFS 2008 和 Visual Studio 2008 中使用 Team Build 时,自动为增量、夜间构建生成增量 SQL 脚本?

mysql匹配url

mysql - 如何在 Hibernate 4 中使用 Mysql 中的 jpa 动态添加列?

MySQL将两列合并为一列,一列另一行

mysql - 无法连接到 "mydomain.tld"(10060) 上的 MySQL 服务器

sql - 如何在sql server中减去两个时间?

MySQL:将列从一个表快速复制到另一个表

python - Pyspark:将不同表中的列相乘

c# - 转换错误

java - 条件生成器分组依据和计数不起作用