MySQL 获取每日数据的最大值所在的数据列

本文介绍如何通过SQL查询从't_log_online'表中提取每日玩家在线的峰值数据,包括最大在线人数和对应日期,展示了数据筛选和排序的关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

表结构:

CREATE TABLE `t_log_online` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `online` int(10) unsigned NOT NULL COMMENT '在线人数量',
  `distinct_ip` int(11) NOT NULL DEFAULT '0' COMMENT '在线IP数量',
  `dateline` int(11) NOT NULL COMMENT '写入时间戳',
  PRIMARY KEY (`id`),
  KEY `dateline` (`dateline`) USING BTREE,
) ENGINE=InnoDB AUTO_INCREMENT=425740 DEFAULT CHARSET=utf8mb4 COMMENT='玩家在线日志表';

SQL语句:

获取每日峰值的所有数据列

		SELECT
			a1.*
		FROM
			t_log_online a1,
			(
				SELECT
					max(`online`) `online`,
					dateline
				FROM
					t_log_online
				WHERE
					`online` > 0
					and dateline >= 1606752000 and dateline <= 1611381706
				GROUP BY
					FROM_UNIXTIME(dateline, '%Y-%m-%d')
			) a2
		WHERE
			a1.`online` = a2.`online`
			and a1.`online` > 0
			AND FROM_UNIXTIME(a1.dateline, '%Y-%m-%d') = FROM_UNIXTIME(a2.dateline, '%Y-%m-%d')
			AND a1.dateline >= 1606752000 and a1.dateline <= 1611381706
		ORDER BY
			dateline desc

获取每日峰值的最后一条数据

SELECT
	id,
	`online`,
	dateline,
	distinct_ip
FROM
	(
        /** 获取每日峰值数据 **/
		SELECT
			a1.*
		FROM
			t_log_online a1,
			(
				SELECT
					max(`online`) `online`,
					dateline
				FROM
					t_log_online
				WHERE
					`online` > 0
					and dateline >= 1606752000 and dateline <= 1611381706
				GROUP BY
					FROM_UNIXTIME(dateline, '%Y-%m-%d')
			) a2
		WHERE
			a1.`online` = a2.`online`
            AND a1.`online` > 0
            /** 关键逻辑 **/
		    AND FROM_UNIXTIME(a1.dateline, '%Y-%m-%d') = FROM_UNIXTIME(a2.dateline, '%Y-%m-%d')
        /** 排序,这里决定了最后获取的数据是 每日峰值的第一条还是最后一条 **/
		ORDER BY
			dateline DESC
	) a
/** 按日分组获取 并获取组内 第一条数据 **/
GROUP BY
	FROM_UNIXTIME(dateline, '%Y-%m-%d')

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值