MYSQL查询一周内的数据(最近7天的)怎么写
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MYSQL查询一周内的数据(最近7天的)怎么写相关的知识,希望对你有一定的参考价值。
参考技术Aselect * from wap_content where week(created_at) = week(now)
如果要严格要求是某一年的,那可以这样
查询一天:
select * from table where to_days(column_time) = to_days(now());
select * from table where date(column_time) = curdate();
查询一周:
select * from table where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(column_time);
查询一个月:
select * from table where DATE_SUB(CURDATE(), INTERVAL INTERVAL 1 MONTH) <=
date(column_time);
查询一年:
select * from table where DATE_SUB(CURDATE(), INTERVAL 1 YEAR) <= date(column_time);
扩展资料
mysql查询最近7天的数据:
1,(以当天为起点)
SELECT * FROM tb_equity e where DATE_SUB(CURDATE(), INTERVAL 6 DAY) <=
date(createdate)
2,(以数据库最新的时间最为最近的一天)
SELECT * FROM tb_equity e where createdate > DATE_ADD((select createdate from tb_equity
ORDER BY createdate DESC limit 1) ,INTERVAL -7 day)
and (select createdate from tb_equity ORDER BY createdate DESC limit 1) >= createdate
3,sql查询表中的重复数据
select * from 表名 where 字段名 in (select 字段名 from 表名 group by 字段名 HAVING COUNT(*)
> 1) order by 表名
参考资料来源:百度百科 - 结构化查询语言
参考资料来源:百度百科 - mySQL (关系型数据库管理系统)
参考资料来源:百度百科 - select (Linux 网络编程)
一周内每小时查找MySql并发用户
【中文标题】一周内每小时查找MySql并发用户【英文标题】:Find MySql concurrent user per hour in a week 【发布时间】:2022-01-14 05:39:42 【问题描述】:这是我的表,我想在给定的一周内每小时查找并发用户
我正在尝试计算某个时间范围内的并发用户数。输入如下所示
表格
id user_id login_time
1 23 2016-06-08 09:10:00
2 24 2016-06-08 08:55:00
3 25 2016-06-08 09:29:00
4 26 2016-06-08 09:40:00
5 27 2016-06-08 09:08:00
6 28 2016-06-09 13:40:00
7 31 2016-06-09 14:04:00
如何获取时间范围内的并发用户?
预期输出表
Date | Hour | User |
---|---|---|
2014-08-04 | 0 | 3 |
2014-08-04 | 1 | 2 |
2014-08-04 | 2 | 0 |
2014-08-05 | 0 | 1 |
类似的问题 concurrent users sql
【问题讨论】:
请以文字而非图片的形式发布数据。到目前为止,您尝试过什么? 您还存储注销时间吗? @circo 不,只有登录时间。我们可以假设用户注销时间是登录时间后 1 小时。 dev.mysql.com/doc/refman/8.0/en/… dev.mysql.com/doc/refman/8.0/en/aggregate-functions.html dev.mysql.com/doc/refman/8.0/en/group-by-handling.html “并发用户 sql”的链接是一篇带有标签的文章:mysql
?
【参考方案1】:
你可以从这个开始,但是(在我看来)你想要得到的结果没有意义,因为你需要计算时间:
如果用户输入 9:30 并离开 9:35 并重新输入 9:45 不是并发用户,但您在 SQL 中得到了这个。 如果用户输入 9:59 并输入 10:01,则您有一个并发用户,但您不会看到此“小时”逻辑 不同日期的并发用户(23:59 和 00:01 登录)无论如何,您要求的 SQL: SQL Fiddle 选择 up.user_id, up.diff 作为 TimeDiff, 从 ( SELECT TIMESTAMPDIFF(HOUR,u1.login,u2.login) as diff, u1.user_id FROM users u1 加入用户 u2 ON u1.user_id = u2.user_id AND u1.login
并且没有 DIFF 时间(根据您的要求):
SELECT
g.id,
g.hour,
g.datelogin,
COUNT(*) as times
FROM
(SELECT HOUR(login) as hour, DATE(login) as datelogin, id FROM users) g
GROUP BY datelogin, hour, id
HAVING COUNT(*) > 1 -- This will show only counts is bigger than 1
【讨论】:
@Abbad 对不起,我不明白你的评论。您能否评论带有更真实数据的链接以检查您的问题?例如,使用您将获得的数据作为结果 @Abbad 请检查我的更新:我更新了查询以及您的数据,因为在您的小提琴中没有并发结果的用户来显示示例。为了澄清,我删除了 GROUP。 @Abbad 答案就是答案。【参考方案2】:我创建了一个DBFIDDLE
首先我输入了您问题中的数据
中途我将数据更改为此处给出的内容:http://sqlfiddle.com/#!9/67356f/2
首先cte1
包含来自users
的第一个和最后一个日期。
cte2
包含StartDate
和EndDate
之间的所有日期
cte3
包含日期的所有 (24) 小时。
这只是计算用户是否登录。
WITH RECURSIVE cte1 AS (
SELECT
DATE(MIN(login_time)) StartDate,
DATE(MAX(login_time)) EndDate
FROm users),
cte2 AS (
SELECT cte1.StartDate
from cte1
union all
select DATE_ADD(cte2.StartDate, INTERVAL 1 DAY)
from cte2
cross join cte1 where cte2.StartDate < cte1.EndDate
),
cte3 AS (
SELECT StartDate, 0 as H
FROM cte2
UNION ALL
SELECT StartDate, H+1 FROM cte3 WHERE H<24
)
select * from (
select
StartDate as `Date`,
H as `hour`,
(SELECT count(*) from users
WHERE login_time BETWEEN DATE_ADD(StartDate, interval H HOUR) AND DATE_ADD(StartDate, interval (H+1) HOUR)
) as `Count`
from cte3) x
where x.`Count` <>0
order by 1,2;
【讨论】:
如何将此转换为 MySQL5.6 在此问题 + 答案中进行了说明:How do you use the "WITH" clause in MySQL?以上是关于MYSQL查询一周内的数据(最近7天的)怎么写的主要内容,如果未能解决你的问题,请参考以下文章