相关文章推荐
DROP TABLE IF EXISTS CSDN_TEST;
CREATE TABLE CSDN_TEST (
	user_id CHAR(4) COMMENT '用户id',
	access_year INT(4) COMMENT '访问年'
INSERT INTO CSDN_TEST VALUES 
('0001',1999),
('0002',1999),
('0001',2000),
('0002',2001),
('0001',2001),
('0002',2002),
('0001',2002),
('0002',2003),
('0001',2005),
('0001',2006),
('0001',2007);

二、查看数据结构

SELECT * FROM CSDN_TEST;

三、需求(计算出数据中每个用户的最长连续访问年数)

  • 1.使用开窗函数 row_number() 计算出每位用户访问记录中每一年在组内中的序号。

    SELECT
    	user_id,
    	access_year,
    	row_number() over(partition by user_id order by access_year) as rn
    	CSDN_TEST;	
    

    在这里插入图片描述

  • 2.核心步骤:在上一次计算基础之上使用access_year 减去 rn

    SELECT 
    	user_id,
    	access_year,
    	row_number() over(partition by user_id order by access_year) as rn, 
    	access_year - row_number() over(partition by user_id order by access_year) as diff 
    FROM CSDN_TEST
    

    在这里插入图片描述
    到此,细心的朋友就已经返现图中的规律了。
    规律就是在一个用户的所有访问年当中,如果年是连续的那么它们的 diff 值是相同的

  • 3.求出每个用户的所有连续登录年数的情况

    SELECT *
    	user_id,
    	count(*) AS years
    FROM tmp
    GROUP BY user_id,diff
     

    注意:这里使用的 tmp 表就是前面一步计算出来的表,为了减少SQL 的复杂性,所以笔者简化了SQL,还请读者自行做一下改变

    可以看出我们现在已经求出每个用户所有的连续访问年数,现在最后一步要做的就是利用上一步得出的数据,计算每个用户的最大访问年数 (还是以一样的我们把现在这一步骤得出的数据又命名为 tmp2 临时表)

    • 4.求出每个用户的最大连续访问年数

      SELECT 
      	user_id,
      	max(years) as max_years
      FROM tmp2
      GROUP BY user_id
                          文章向导一、造数据二、查看数据结构三、需求(计算出数据中每个用户的最长连续访问年数)一、造数据DROP TABLE IF EXISTS CSDN_TEST;CREATE TABLE CSDN_TEST (	user_id CHAR(4) COMMENT '用户id',	access_year INT(4) COMMENT '访问年');INSERT INTO CSDN_TEST VALUES ('0001',1999),('0002',1999),('0001',2000),('00
      				
      SQL Server日期计算      通常,你需要获得当前日期计算一些其他的日期,例如,你的程序可能需要判断一个月的第一天或者最后一天。你们大部分人大概都知道怎样把日期进行分割(年、月、日等),然后仅仅用分割出来的年、月、日等放在几个函数中计算出自己所需要的日期!在这篇文章里,我将告诉你如何使用DATEADD和DATEDIFF函数来计算出在你的程序中可能你要用到的一些不同日期。   在使用本文中的例子之前,你必须注意以下的问题。大部分可能不是所有例子在不同的机器上执行的结果可能不一样,这完全由哪一天是一个星期的第一天这个设置决定。第一天(DATEFIRST)设定决定了你的系统使用哪一天作为
      特别注意:经验证number不能超过2048,超过部分不可用 --生成日期序列,特别注意,经验证number不能超过2048,超过部分不可用 select observedate sdate,DATEADD(hour,23,observedate) edate from ( SELECT DATEADD(DAY,number,CAST(@i as varchar)+'-01-01 00:00:00') observedate master..spt_values select dateadd(DAY,number,@startDate) as [连续日期] from master.dbo.spt_values where type =‘P’ and number <=DATEDIFF(DAY, @startDate, @endDate)
      mysql日期一年的方法:日期增加一年使用updata更新语句,代码为【UPDATE table SET date = DATE_ADD(date, INTERVAL 1 YEAR)】 我们在处理mysql日期数据时,有时候需要在指定日期的基础往后调整一年SQL语句如下: UPDATE table SET date = DATE_ADD(date, INTERVAL 1 YEAR) 如果要增加1天,则后面的 1 YEAR 变成 1 DAY,1月则是 1 MONTH。 如果需要增加多年多月,
      SQL是一种数据查询和管理的语言,可以根据出生日期计算一个人的年龄。在SQL中,可以使用函数来计算年龄,比如DATEDIFF函数和YEAR函数。 其中,DATEDIFF函数可以计算两个日期之间的时间差, YEAR函数可以提取日期中的年份。我们可以使用这两个函数来计算年龄。 具体的SQL查询语句为: SELECT DATEDIFF(year, birthdate, GETDATE()) - CASE WHEN (MONTH(birthdate) > MONTH(getdate()) OR (MONTH(birthdate) = MONTH(getdate()) AND DAY(birthdate) > DAY(getdate()))) THEN 1 ELSE 0 END AS age FROM person 其中,birthdate是出生日期的列名,GETDATE()获取当前日期,DATEDIFF计算年份之差,CASE语句用来判断出生月份和当前月份,如果当前月份小于出生月份则年龄减一,否则不变。 以上就是使用SQL根据出生日期计算年龄的方法。
      Your hostname, xxx resolves to a loopback address: 127.0.1.1; using x.x.x.x instead(on interface xx)
 
推荐文章