1

我有一个网站可以跟踪在线游戏的玩家统计数据。我正在尝试构建的功能之一是获取玩家的氏族历史。保存此信息的表如下所示:

PLAYERID --|-- CLANTAG -|- UPDATETIME
-----------------------------------------------
XXXXXXXX --|-- [XXXXX] -|- 0000-00-00 00:00:00

UPDATETIME 是我的爬虫访问游戏 API 并获取信息的日期和时间,这是我在某个部落中花费的时间的基础。

我有这个查询,但它只获取用户进入氏族的日期。我想不通的是如何获得他拥有 CLANTAG 的最早日期和最新日期:

SELECT CLANTAG, UPDATETIME FROM account_stats WHERE PLAYERID = "XXXXXXXXX" GROUP BY CLANTAG

另一个问题是用户可能已经离开了一个部落然后又加入了它,而我上面所做的查询只会将它们捆绑在一起,所以我完全迷失了:/

提前致谢!

4

1 回答 1

1

要获取每个组的最早和最晚日期,您可以使用MIN()MAX()聚合函数

SELECT playerid, clantag, 
       MIN(updatetime) earliest_time,
       MAX(updatetime) latest_time
  FROM Table1
 WHERE playerid = 1
 GROUP BY playerid, clantag

样本输出:

| 玩家ID | CLANTAG | EARLIEST_TIME | LATEST_TIME |
-------------------------------------------------- -------------------------------------------
| 1 | 1 | 2013 年 5 月 20 日 12:00:00+0000 | 2013 年 7 月 3 日 15:00:00+0000 |

这是SQLFiddle演示

于 2013-08-14T16:30:13.383 回答