LeetCode MySQL 1369. 获取最近第二次的活动(over窗口函数)

文章目录

    • 1. 题目
    • 2. 解题

1. 题目

表: UserActivity

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| username      | varchar |
| activity      | varchar |
| startDate     | Date    |
| endDate       | Date    |
+---------------+---------+
该表不包含主键
该表包含每个用户在一段时间内进行的活动的信息
名为 username 的用户在 startDate 到 endDate 日内有一次活动

写一条SQL查询展示每一位用户 最近第二次 的活动(倒数第二次

如果用户仅有一次活动,返回该活动

一个用户不能同时进行超过一项活动,以 任意 顺序返回结果

下面是查询结果格式的例子:

UserActivity 表:
+------------+--------------+-------------+-------------+
| username   | activity     | startDate   | endDate     |
+------------+--------------+-------------+-------------+
| Alice      | Travel       | 2020-02-12  | 2020-02-20  |
| Alice      | Dancing      | 2020-02-21  | 2020-02-23  |
| Alice      | Travel       | 2020-02-24  | 2020-02-28  |
| Bob        | Travel       | 2020-02-11  | 2020-02-18  |
+------------+--------------+-------------+-------------+Result 表:
+------------+--------------+-------------+-------------+
| username   | activity     | startDate   | endDate     |
+------------+--------------+-------------+-------------+
| Alice      | Dancing      | 2020-02-21  | 2020-02-23  |
| Bob        | Travel       | 2020-02-11  | 2020-02-18  |
+------------+--------------+-------------+-------------+Alice 最近第二次的活动是从 2020-02-242020-02-28 的旅行, 在此之前的 2020-02-212020-02-23 她进行了舞蹈
Bob 只有一条记录,我们就取这条记录

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/get-the-second-most-recent-activity
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 先选出只有一次活动的人的记录
select *
from UserActivity
group by username
having count(*)=1
{"headers": ["username", "activity", "startDate", "endDate"], 
"values": [["Bob", "Travel", "2020-02-11", "2020-02-18"]]}
  • 窗口函数选出每个人倒数第二次的活动
select username, activity, startDate, endDate
from
(select *, rank() over(partition by username order by startDate desc) rnkfrom UserActivity
) t
where rnk = 2
{"headers": ["username", "activity", "startDate", "endDate"], 
"values": [["Alice", "Dancing", "2020-02-21", "2020-02-23"]]}
  • 最后合并
# Write your MySQL query statement below
select *
from
(select *from UserActivitygroup by usernamehaving count(*)=1union allselect username, activity, startDate, endDatefrom(select *, rank() over(partition by username order by startDate desc) rnkfrom UserActivity) twhere rnk = 2
) t

更简洁的写法

# Write your MySQL query statement below
select username, activity, startDate, endDate
from
(select *,rank() over (partition by username order by startDate desc) rnk,count(*) over (partition by username) cntfrom UserActivity
) t
where cnt = 1 or rnk = 2

我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/474591.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

侧边导航栏的实现

F:\java\c侧边栏\侧边菜单栏\MySlidingMenu转载于:https://www.cnblogs.com/ct732003684/archive/2013/03/24/2979416.html

LeetCode MySQL 569. 员工薪水中位数(over窗口函数)

文章目录1. 题目2. 解题1. 题目 Employee 表包含所有员工。Employee 表有三列:员工Id,公司名和薪水。 ------------------------- |Id | Company | Salary | ------------------------- |1 | A | 2341 | |2 | A | 341 …

【IEnumerable】扩展方法的使用 C#

直接进入主题吧... IEnumerable : 公开枚举数,该枚举数支持在非泛型集合上进行简单迭代。 好吧,迭代,我就理解成循环,这些名词真晦涩,没意思 今天看的是 Using Extension Methods ,使用"扩展方法…

LeetCode MySQL 571. 给定数字的频率查询中位数

文章目录1. 题目2. 解题1. 题目 Numbers 表保存数字的值及其频率。 ----------------------- | Number | Frequency | -----------------------| | 0 | 7 | | 1 | 1 | | 2 | 3 | | 3 | 1 | -------…

LeetCode 632. 最小区间(排序+滑动窗口)

文章目录1. 题目2. 解题1. 题目 你有 k 个升序排列的整数数组。 找到一个最小区间&#xff0c;使得 k 个列表中的每个列表至少有一个数包含在其中。 我们定义如果 b-a < d-c 或者在 b-a d-c 时 a < c&#xff0c;则区间 [a,b] 比 [c,d] 小。 示例 1: 输入:[[4,10,15,…

dz论坛php.ini设置,Discuz!X1.5至3.2论坛Win主机与Linux主机伪静态设置方法

用discuz x1.5至3.2的程序搭建的一个论坛&#xff0c;DZ论坛win主机与linux主机伪静态规则的设置方法&#xff01;Windows主机设置方法&#xff1a;1.建立一个名为 httpd.ini 的文件&#xff0c;可以先在电脑上面新建一个文本&#xff0c;然后将下面的这些代码复制到本文里面&a…

LeetCode MySQL 1194. 锦标赛优胜者

文章目录1. 题目2. 解题1. 题目 Players 玩家表 -------------------- | Column Name | Type | -------------------- | player_id | int | | group_id | int | -------------------- 玩家 ID 是此表的主键。 此表的每一行表示每个玩家的组。Matches 赛事表 -----…

php 管理员表和用户表,求discuz的管理员数据表和用户数据表结构

magicmaster07-23 09:35等级3楼不想装mysql&#xff0c;PHP&#xff0c;还有那种phpadmin只要了解一下用户表结构&#xff0c;用注入删掉一个版主&#xff0c;呵呵discuz是怎么把数据表转成向量的?52juanjuan07-23 09:46等级4楼你可以把它的系统与现在运行的网址给各位去说说。…

LeetCode MySQL 1097. 游戏玩法分析 V

文章目录1. 题目2. 解题1. 题目 Activity 活动记录表 ----------------------- | Column Name | Type | ----------------------- | player_id | int | | device_id | int | | event_date | date | | games_played | int | ---------------------…

PCA主成分分析

首先可以先阅读这一篇文档。 http://wenku.baidu.com/view/4df2c1d276a20029bd642d76.html 基本的算法和原理在上面的文档内已经写得很详细了&#xff0c;总结一下PCA的数学模型吧&#xff1a; 第一种求法&#xff1a; 易知A是对称阵&#xff0c;所以可以对角化 因为P是要求出来…

oracle xe 最大连接数,解决Oracle XE报错ORA-12516(Oracle回话数超出限制)

本地安装的OracleXEUniv—oracle特别版&#xff0c;免费用户可以自由使用&#xff0c;但有连接数量和存储限制。最近遇到一个问题&#xff0c;当我的SSM项目连接本地数据库oracleXE后&#xff0c;我的navicat再连接时就会报错ORA-12516&#xff0c;就是oracle的会话数超出了限制…

LeetCode MySQL 579. 查询员工的累计薪水(over(rows n preceding)选取窗口1+前n条)

文章目录1. 题目2. 解题1. 题目 Employee 表保存了一年内的薪水信息。 请你编写 SQL 语句&#xff0c;对于每个员工&#xff0c;查询他除最近一个月&#xff08;即最大月&#xff09;之外&#xff0c;剩下每个月的近三个月的累计薪水&#xff08;不足三个月也要计算&#xff…

LeetCode MySQL 615. 平均工资:部门与公司比较(over窗口函数)

文章目录1. 题目2. 解题1. 题目 给如下两个表&#xff0c;写一个查询语句&#xff0c;求出在每一个工资发放日&#xff0c;每个部门的平均工资与公司的平均工资的比较结果 &#xff08;高 / 低 / 相同&#xff09;。 表&#xff1a; salary | id | employee_id | amount | p…

LeetCode MySQL 1127. 用户购买平台 *

文章目录1. 题目2. 解题1. 题目 支出表: Spending ---------------------- | Column Name | Type | ---------------------- | user_id | int | | spend_date | date | | platform | enum | | amount | int | ---------------------- 这张表记…

Example3_1

import java.util.*;public class Example3_1{ public static void main(String args[]){ Scanner readernew Scanner(System.in); System.out.println("输入待移位的int型整数:"); int xreader.nextInt(); System.out.println("输入移位量:"); int n…

oracle事务重要属性,Oracle中的事务(2)--属性和隔离级别

事务的属性1.只读属性(read only)只读事务&#xff0c;只执行查询操作&#xff0c;而不允许执行DML(增、删、改)操作&#xff0c;使用只读事务&#xff0c;可以让用户只取到某个时间点的数据。假如有一个机票代售点&#xff0c;有一个管理员想在一个时间点进行统计总共卖出去的…

edge.js架起node.js和.net互操作桥梁

今天要介绍的是edge.js这个github上刚兴起的开源项目&#xff0c;它可以让node.js和.net之间在in-process下互操作。.net版本在4.5及以上&#xff0c;因为.net4.5带来的Task&#xff0c;asyn&#xff0c;await关键字和node.js的Event模型正好匹配。如果你感兴趣的话&#xff0c…

LeetCode MySQL 180. 连续出现的数字(cast)

文章目录1. 题目2. 解题1. 题目 编写一个 SQL 查询&#xff0c;查找所有至少连续出现三次的数字。 --------- | Id | Num | --------- | 1 | 1 | | 2 | 1 | | 3 | 1 | | 4 | 2 | | 5 | 1 | | 6 | 2 | | 7 | 2 | --------- 例如&#xff0c;给定上面的 L…

LeetCode MySQL 178. 分数排名(dense_rank连续排名)

文章目录1. 题目2. 解题1. 题目 编写一个 SQL 查询来实现分数排名。 如果两个分数相同&#xff0c;则两个分数排名&#xff08;Rank&#xff09;相同。 请注意&#xff0c;平分后的下一个名次应该是下一个连续的整数值。 换句话说&#xff0c;名次之间不应该有“间隔”。 --…

LeetCode MySQL 185. 部门工资前三高的所有员工(dense_rank)

文章目录1. 题目2. 解题1. 题目 Employee 表包含所有员工信息&#xff0c;每个员工有其对应的工号 Id&#xff0c;姓名 Name&#xff0c;工资 Salary 和部门编号 DepartmentId 。 --------------------------------- | Id | Name | Salary | DepartmentId | ---------------…