计算具有给定日期中第一个出现的相关记录的记录

巴赫

我有两个表,playersgames,创建如下:

CREATE TABLE IF NOT EXISTS `players` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `created_at` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `games` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `player` int(11) NOT NULL,
  `played_at` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

我希望每天提取3个值:

  1. 当天创建的玩家数
  2. 当天的玩家人数
  3. 当天首次玩的玩家数量

因此,例如假设players表如下所示:

+----+--------+---------------------+
| id | name   | created_at          |
+----+--------+---------------------+
|  1 | Alan   | 2016-02-01 00:00:00 |
|  2 | Benny  | 2016-02-01 06:00:00 |
|  3 | Calvin | 2016-02-02 00:00:00 |
|  4 | Dan    | 2016-02-03 00:00:00 |
+----+--------+---------------------+

游戏表如下所示:

+----+--------+---------------------+
| id | player | played_at           |
+----+--------+---------------------+
|  1 |      1 | 2016-02-01 01:00:00 |
|  2 |      3 | 2016-02-02 02:00:00 |
|  3 |      2 | 2016-02-03 14:00:00 |
|  4 |      3 | 2016-02-03 17:00:00 |
|  5 |      3 | 2016-02-03 18:00:00 |
+----+--------+---------------------+

然后查询应该返回类似

+------------+-----+--------+-------+
| day        | new | played | first |
+------------+-----+--------+-------+
| 2016-02-01 | 2   | 1      | 1     |
| 2016-02-02 | 1   | 1      | 1     |
| 2016-02-03 | 1   | 2      | 1     |
+------------+-----+--------+-------+

我有1(的解决方案

SELECT Date(created_at) AS day,
       Count(*)         AS new
FROM   players
GROUP  BY day;  

这很容易。我想我也有2(播放的解决方案,这要感谢MySQL COUNT DISTINCT

select Date(played_at) AS day,
       Count(Distinct player) AS played
FROM   games
GROUP  BY day;

但是我不知道如何获得3(first所需的结果我也不知道如何将所有内容放在单个查询中,以节省执行时间(该games表可能包含数百万条记录)。


如果您需要它,这是一个查询,其中插入了示例数据:

INSERT INTO `players` (`id`, `name`, `created_at`) VALUES
(1, 'Alan', '2016-02-01 00:00:00'),
(2, 'Benny', '2016-02-01 06:00:00'),
(3, 'Calvin', '2016-02-02 00:00:00'),
(4, 'Dan', '2016-02-03 00:00:00');

INSERT INTO `games` (`id`, `player`, `played_at`) VALUES
(1, 1, '2016-02-01 01:00:00'),
(2, 3, '2016-02-02 02:00:00'),
(3, 2, '2016-02-03 14:00:00'),
(4, 3, '2016-02-03 17:00:00'),
(5, 3, '2016-02-03 18:00:00');
约阿希姆·伊萨克森(Joachim Isaksson)

一种版本是将所有相关数据放入一个联合并从那里进行分析。

SELECT SUM(type='P') new, 
       COUNT(DISTINCT CASE WHEN type='G' THEN pid END) played, 
       SUM(type='F') first 
FROM (
  SELECT id pid, DATE(created_at) date, 'P' type FROM players 
  UNION ALL 
  SELECT player, DATE(played_at) date,  'G' FROM games 
  UNION ALL 
  SELECT player, MIN(DATE(played_at)),  'F' FROM games GROUP BY player
) z 
GROUP BY date;

在工会中;

类型的记录P是玩家创建统计信息。
类型的记录是与G玩家相关的游戏统计信息。
类型记录F是玩家玩第一场游戏的统计信息。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

按创建日期的第一个表记录,还有2个条件

来自分类Dev

在R(data.table)中查找具有记录的连续两周的第一个日期

来自分类Dev

如何从给定日期中的oracle中获取确切的年份(如果它具有最小的格式基础)?

来自分类Dev

SQL:查找具有给定日期范围内每月数据的记录

来自分类Dev

给定日期范围内的第一个非空值

来自分类Dev

返回给定日期内的所有记录

来自分类Dev

返回等于或早于给定日期的第一个日期?

来自分类Dev

具有复杂记录分隔符的gawk仅打印第一个匹配记录

来自分类Dev

SQL从给定日期选择前3条记录

来自分类Dev

需要帮助才能在给定日期从2个以上的表中获取记录

来自分类Dev

获取每个给定日期之前的雇员的最新记录

来自分类Dev

尝试获取具有特定日期值的第一个元素的标头

来自分类Dev

检索小于给定日期的第一个日期不起作用Excel

来自分类Dev

检索小于给定日期的第一个日期不起作用Excel

来自分类Dev

检索小于给定日期的第一个日期不起作用Excel

来自分类Dev

在R(data.table)中查找具有记录的连续两周的第一个日期

来自分类Dev

SQL:查找具有给定日期范围内每个月的数据的记录

来自分类Dev

如何在排序列中查找给定日期之后的第一个日期

来自分类Dev

获取一组记录与给定日期的最接近日期

来自分类Dev

SQL从给定日期选择前3条记录

来自分类Dev

需要帮助以在给定日期从2个以上的表中获取记录

来自分类Dev

如何在MySQL查询中获取具有最高日期作为给定日期的记录数

来自分类Dev

获取每个给定日期之前的雇员的最新记录

来自分类Dev

选择给定日期和日期之间的记录。

来自分类Dev

查找一个月中给定日期的下一次出现

来自分类Dev

在两列中显示具有重复值的记录的第一个实例

来自分类Dev

计算每个时间段内第一个出现的记录

来自分类Dev

获取给定日期后特定日期的第一次出现

来自分类Dev

如何使用 dplyr 和 lubridate 包按一系列给定日期计算活动记录?

Related 相关文章

  1. 1

    按创建日期的第一个表记录,还有2个条件

  2. 2

    在R(data.table)中查找具有记录的连续两周的第一个日期

  3. 3

    如何从给定日期中的oracle中获取确切的年份(如果它具有最小的格式基础)?

  4. 4

    SQL:查找具有给定日期范围内每月数据的记录

  5. 5

    给定日期范围内的第一个非空值

  6. 6

    返回给定日期内的所有记录

  7. 7

    返回等于或早于给定日期的第一个日期?

  8. 8

    具有复杂记录分隔符的gawk仅打印第一个匹配记录

  9. 9

    SQL从给定日期选择前3条记录

  10. 10

    需要帮助才能在给定日期从2个以上的表中获取记录

  11. 11

    获取每个给定日期之前的雇员的最新记录

  12. 12

    尝试获取具有特定日期值的第一个元素的标头

  13. 13

    检索小于给定日期的第一个日期不起作用Excel

  14. 14

    检索小于给定日期的第一个日期不起作用Excel

  15. 15

    检索小于给定日期的第一个日期不起作用Excel

  16. 16

    在R(data.table)中查找具有记录的连续两周的第一个日期

  17. 17

    SQL:查找具有给定日期范围内每个月的数据的记录

  18. 18

    如何在排序列中查找给定日期之后的第一个日期

  19. 19

    获取一组记录与给定日期的最接近日期

  20. 20

    SQL从给定日期选择前3条记录

  21. 21

    需要帮助以在给定日期从2个以上的表中获取记录

  22. 22

    如何在MySQL查询中获取具有最高日期作为给定日期的记录数

  23. 23

    获取每个给定日期之前的雇员的最新记录

  24. 24

    选择给定日期和日期之间的记录。

  25. 25

    查找一个月中给定日期的下一次出现

  26. 26

    在两列中显示具有重复值的记录的第一个实例

  27. 27

    计算每个时间段内第一个出现的记录

  28. 28

    获取给定日期后特定日期的第一次出现

  29. 29

    如何使用 dplyr 和 lubridate 包按一系列给定日期计算活动记录?

热门标签

归档