日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

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

發(fā)布時(shí)間:2024/7/5 数据库 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode MySQL 1369. 获取最近第二次的活动(over窗口函数) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

    • 1. 題目
    • 2. 解題

1. 題目

表: UserActivity

+---------------+---------+ | Column Name | Type | +---------------+---------+ | username | varchar | | activity | varchar | | startDate | Date | | endDate | Date | +---------------+---------+ 該表不包含主鍵 該表包含每個(gè)用戶在一段時(shí)間內(nèi)進(jìn)行的活動(dòng)的信息 名為 username 的用戶在 startDate 到 endDate 日內(nèi)有一次活動(dòng)

寫(xiě)一條SQL查詢展示每一位用戶 最近第二次 的活動(dòng)(倒數(shù)第二次

如果用戶僅有一次活動(dòng),返回該活動(dòng)

一個(gè)用戶不能同時(shí)進(jìn)行超過(guò)一項(xiàng)活動(dòng),以 任意 順序返回結(jié)果

下面是查詢結(jié)果格式的例子:

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 最近第二次的活動(dòng)是從 2020-02-242020-02-28 的旅行, 在此之前的 2020-02-212020-02-23 她進(jìn)行了舞蹈 Bob 只有一條記錄,我們就取這條記錄

來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/get-the-second-most-recent-activity
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。

2. 解題

  • 先選出只有一次活動(dòng)的人的記錄
select * from UserActivity group by username having count(*)=1 {"headers": ["username", "activity", "startDate", "endDate"], "values": [["Bob", "Travel", "2020-02-11", "2020-02-18"]]}
  • 窗口函數(shù)選出每個(gè)人倒數(shù)第二次的活動(dòng)
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

更簡(jiǎn)潔的寫(xiě)法

# 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/

長(zhǎng)按或掃碼關(guān)注我的公眾號(hào)(Michael阿明),一起加油、一起學(xué)習(xí)進(jìn)步!

總結(jié)

以上是生活随笔為你收集整理的LeetCode MySQL 1369. 获取最近第二次的活动(over窗口函数)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。