我有下面描述的两个表。我需要的是一个单一的查询,它将告诉我在给定的天数内得分没有变化的球员。
CREATE TABLE players (
pid INT(50),
name VARCHAR(255),
updatedAt DATETIME
);
CREATE TABLE pl_scores (
pid INT(50),
score INT(255),
updatedAt DATETIME
);
该players
表保留了所有玩家的主列表以及其他不变的数据,为简洁起见未在此处显示。该pl_scores
表保留分数变化的运行历史记录,以跟踪增长和其他可能发生变化的值。pl_scores
每 6 小时为每个玩家插入一条新记录。
我想得到的是pid
在一定天数内没有得分变化的球员,但我不确定如何将其分组以获得正确的值。
示例数据集
(只显示每天的最后一个分数,真正需要比较的只是一个)
+------+------+-------+------+---------+---------------------+
| pid | aid | score | rank | cityCnt | updatedAt |
+------+------+-------+------+---------+---------------------+
| 1660 | 0 | 801 | 2111 | 1 | 2012-06-20 22:14:11 |
| 1660 | 0 | 801 | 2250 | 1 | 2012-06-21 22:15:45 |
| 1660 | 0 | 801 | 2387 | 1 | 2012-06-22 22:17:06 |
| 1660 | 0 | 801 | 2547 | 1 | 2012-06-23 22:17:09 |
| 1660 | 0 | 801 | 2702 | 1 | 2012-06-24 22:19:50 |
| 1660 | 0 | 801 | 2836 | 1 | 2012-06-25 22:21:07 |
| 1660 | 0 | 801 | 2956 | 1 | 2012-06-26 21:42:44 |
+------+------+-------+------+---------+---------------------+
编辑
下面找到的答案完美无缺,但现在我想更进一步,并通过在第三张表中找到的硬编码值来限制结果。这是有效的 SQL 语句
SELECT a.pid, c.aid, b.name AS pName, c.name AS aName, a.score FROM pl_scores AS a
JOIN players AS b ON a.pid = b.pid
JOIN alliances AS c ON b.aid = c.aid
WHERE a.updatedAt >= CURRENT_DATE() - INTERVAL 3 DAY GROUP BY a.pid HAVING MIN(a.score) = MAX(a.score);
每个玩家在世界各地都有多个城市。我想限制在给定大陆上找到城市的玩家的结果。例如,我想找到最近 3 天在 大陆 上没有改变分数的所有玩家34
。该cities
表如下所示:
CREATE TABLE cities (
cid INT(50),
pid INT(50),
name VARCHAR(255),
cont INT(10),
updatedAt DATETIME
);