请问: 查询到今天为止连续3天登陆的用户 (sql语句)

问题描述

请问: 查询到今天为止连续3天登陆的用户 (sql语句)

KeyId UserID Time
2 131 2014-12-29
3 131 2014-12-30
4 102 2014-12-23
5 30 2014-12-29
6 30 2014-12-28
7 30 2014-12-27
8 19 2014-12-29
9 7 2014-12-29
10 8 2014-12-30
用户登陆表

查询出以前(前天)到今天, 连续3天都登陆过的用户的数量
请问sql怎么写, 谢谢

解决方案

数据库都有日期差函数,然后按照这个条件,并结合count函数,得到数量是否为3

解决方案二:

http://www.cnblogs.com/TeyGao/p/3628950.html

解决方案三:

以下代码, 亲测可用

 IF OBJECT_ID('T_ask') IS NOT NULL
DROP TABLE T_ask
GO
CREATE TABLE T_ask(
    KeyId INT,
    UserId INT,
    [Time] DATETIME
)
GO
INSERT INTO T_ask
(
    KeyId,
    UserId,
    [Time]
)
select 2, 131, '2014-12-29' UNION
select 3, 131 , '2014-12-30' UNION
select 4, 102 , '2014-12-23' UNION
select 5, 30 , '2014-12-29' UNION
select 6, 30 , '2014-12-28' UNION
select 7, 30 , '2014-12-27' UNION
select 8, 19 , '2014-12-29' UNION
select 9, 7 , '2014-12-29' UNION
select 10, 8 , '2014-12-30'
;WITH t as (
    --排除一天多次登录
    SELECT UserId,CONVERT(DATETIME, CONVERT(varchar(100), [Time], 112)) AS [Time]
    FROM T_ask ta
    GROUP BY ta.UserId,CONVERT(varchar(100), [Time], 112)
)
,t2 AS (
    SELECT a.UserId
        , a.TIME
        , DATEDIFF(DAY, (SELECT MIN(b.Time) FROM t B WHERE a.UserId=b.UserId) , a.time) AS X
    FROM t AS A
)
SELECT * FROM T_ask WHERE userId IN (
    SELECT userId FROM t2 A WHERE EXISTS(
        SELECT 1 FROM t2 B WHERE a.userId=b.UserId AND b.X-a.X=1
    )
    and EXISTS(
        SELECT 1 FROM t2 B WHERE a.userId=b.UserId AND b.X-a.X=2
    )
)
ORDER BY userId, [Time]

解决方案四:

select * from login A where exists( select 1 from login B where A.user_id = B.user_id and A.time = B.time + 1) and
exists(select 1 from login C where A.user_id = C.user_id and A.time = C.time + 2)

时间: 2024-10-30 21:22:30

请问: 查询到今天为止连续3天登陆的用户 (sql语句)的相关文章

查询给定日期是当年的第几月的sql语句

查询给定日期是当年的第几月的sql语句 declare @date datetime; set @date = getdate() select datepart(month,@date) [monthofyear]; --返回int型 select datename(month,@date) [monthofyear]; --返回varchar型 select month(@date) [monthofyear];--返回int型 go

查询mysql中执行效率低的sql语句的方法_Mysql

一些小技巧1. 如何查出效率低的语句?在MySQL下,在启动参数中设置 --log-slow-queries=[文件名],就可以在指定的日志文件中记录执行时间超过long_query_time(缺省为10秒)的SQL语句.你也可以在启动配置文件中修改long query的时间,如: 复制代码 代码如下:  # Set long query time to 8 seconds    long_query_time=8 2. 如何查询某表的索引?可使用SHOW INDEX语句,如: 复制代码 代码如

在ASP中使用SQL语句之6:存储查询

语句 当你的查询相对简单的时候,每次从头开始创建SQL语句也不费什么工夫,不过,复杂的查询就不同了,每次都从头来会产生很多开发错误.因此,一旦让SQL顺利地运行起来,你最好把它们存起来,在需要时再调用它们.这样,哪怕是一个简单查询你都能随时用上存储的查询语句了. 假设你每周都要给团队做一次报告,指出目前存在的业务支持问题,这些数据需要从你的数据库中选取,而且要按照日期选择记录,同时根据你所在团队所采用的支持问题的类别排序.一旦你设计了这一查询,你何必以后每周都重新编写一次呢?不要在你的HTML页

求大神帮我写一条查询增量的sql语句

问题描述 求大神帮我写一条查询增量的sql语句 如图,我有这些字段,每天都会插入一些数据 我现在需要获取的内容是 今天的read,click数据,和今天的减昨天的差值,和aid,规则如图 求大神帮我写一个 解决方案 SELECT SUM(d.read_num) AS READ, SUM(d.click_num) AS click, SUM(d.read_num - t.read_num) AS diffREAD, SUM(d.click_num - t.click_num) AS diffcli

sql-如何用SQL语句通过1去查询N?

问题描述 如何用SQL语句通过1去查询N? 解决方案 只需要通过1的ID查询N的记录就好了! 解决方案二: sql 语句的执行顺序(1)逻辑查询的各个阶段SQL中的n+1次select语句查询问题SQL中的n+1次select语句查询问题 解决方案三: 这个不就是普通的两张表自动关联而已嘛?通关关联两张表,把结果集放到java的容器里面,每条数据就代表的这种关系了啊,至于要展示成这样,就要看你报表怎么画了啊,ORACLE每条数据呈现的都是这两个表的一种对应关系,比如说1 研发部 1 刘备1 研发

MySQL中查询所有数据库占用磁盘空间大小和单个库中所有表的大小的sql语句_Mysql

查询所有数据库占用磁盘空间大小的SQL语句: 复制代码 代码如下: select TABLE_SCHEMA, concat(truncate(sum(data_length)/1024/1024,2),' MB') as data_size,concat(truncate(sum(index_length)/1024/1024,2),'MB') as index_sizefrom information_schema.tablesgroup by TABLE_SCHEMAorder by dat

link环境下多类型使用同一个表,请问查询的时候应该怎么写?

问题描述 link环境下多类型使用同一个表,请问查询的时候应该怎么写? link环境下多类型使用同一个表,请问查询的时候应该怎么写? 解决方案 先查询出匿名的对象,再用工厂模式或者泛型实例化

MySQL中优化sql语句查询常用的30种方法

本篇文章是对MySQL中优化sql语句查询常用的30种方法进行了详细的分析介绍,需要的朋友参考下   1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 3.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以

请帮忙写一条SQL语句查询前一小时信息

问题描述 请帮忙写一条SQL语句查询前一小时信息 MSSQLServer,有个字段DateTime:2015-03-09 16:08:51.617 我想查询前一小时的信息,因为我公司是45分下班的,所以前一小时应该是14:45:00~14:45:00. 请问如何写一条语句可以查到当前小时的前一小时的信息呢?谢谢帮忙. 解决方案 select * from table where DATEDIFF('h',DateTime,now())>1 and DATEDIFF('h',DateTime,no