MYSQL查询一周内的数据(最近7天的)怎么写

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MYSQL查询一周内的数据(最近7天的)怎么写相关的知识,希望对你有一定的参考价值。

参考技术A

select * 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 包含StartDateEndDate 之间的所有日期

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天的)怎么写的主要内容,如果未能解决你的问题,请参考以下文章

mysql中怎么查询一周内,三个月内,半年内的数据?

java怎么查询数据库一周内的记录

sql 查询每天都有登录的人

mysql查询一周内每天的记录数。

mysql如何出查出最近7天,最近30天,最近n天的记录?

MySQL 查询最近几天的记录 最近7天的记录 本周内的记录