如果上一个和最后一个日期之间的 datediff < 7,如何显示每个用户的最新日期并过滤行

Posted

技术标签:

【中文标题】如果上一个和最后一个日期之间的 datediff < 7,如何显示每个用户的最新日期并过滤行【英文标题】:How to show latest dates for every user and filter rows if datediff between previous & last date < 7 【发布时间】:2020-07-23 05:29:27 【问题描述】:

我有下表结构

UserID | Date
1        2020-01-01
1        2020-01-02
1        2020-01-03
1        2020-02-05
1        2020-02-06
1        2020-03-08
1        2020-03-09
2        2020-02-03
2        2020-02-05
2        2020-02-06
3        2020-02-12
3        2020-02-13
3        2020-03-25
3        2020-03-26

想要的结果:

UserID | Date
1       2020-03-08
1       2020-03-09
2       2020-02-03
2       2020-02-05
2       2020-02-06
3       2020-03-25
3       2020-03-26

所以我需要显示每个用户的最新日期,如果上一个日期和最后一个日期之间的日期差异 则隐藏行

提前感谢您的帮助

【问题讨论】:

【参考方案1】:

我了解您需要每位用户最近 7 天的数据。如果是这样,您可以使用窗口函数:

select userid, date
from (
    select t.*, max(date) over(partition by userid) max_date
    from mytable t
) t
where datediff(day, date, max_date) <= 7

Demo on DB Fiddle

用户名 |日期 :----- | :--------- 1 | 2020-03-08 1 | 2020-03-09 2 | 2020-02-03 2 | 2020-02-05 2 | 2020-02-06 3 | 2020-03-25 3 | 2020-03-26

【讨论】:

您好,感谢您的帮助。不仅是最近 7 天的数据,而且如果上一个日期和下一个日期的差异小于 7 天,则所有数据。因此,例如对于用户 1,如果我们有他整个 4 月的数据,我需要显示它。 @RomuloSQL:我不知道你的意思是什么......这没有显示在你的示例数据中(你可以看到我的查询产生的结果集与你显示的相同) . 例如,用户 4 有 2020-01-01 到 2020-01-05 的记录,也有 2020-02-23 到 2020-03-31 的记录。假设用户 4 没有 2020-03-02 到 2020-03-05 的记录。我需要在 2020-02-23 到 2020-03-31(因为它是最后一个日期期间)期间显示用户 4 的所有可用记录,因为我们没有从 2020-03-02 到 2020-03-05 的天差没有任何记录 @RomuloSQL:在发布答案后对问题进行实质性修改不是一个好习惯。而且您可以看到 cmets 并不是真的要提供示例数据(格式太差了)。我建议asking a new question,提供更能代表您的用例的示例数据和预期结果,以及有关逻辑的更多详细信息。【参考方案2】:

我可以考虑使用下面提到的两个 With 子句语句。

日期1为( 选择用户名,日期 从 ( 选择用户,日期, rank() over(partition by userid order by date desc) as rnk 从表)A 其中 A.rnk=1)

将 Date2 设为 ( 选择用户名,日期 从 ( 选择用户名,日期,, rank () over (partition by userid order by date desc) as rnk 来自表)B 其中 B.rnk = 2)

选择 date1.userid,date1.date from date1 加入 date2 于 date1.userid=date2.userid 其中 DATEDIFF (date1.date,date2.date)

【讨论】:

以上是关于如果上一个和最后一个日期之间的 datediff < 7,如何显示每个用户的最新日期并过滤行的主要内容,如果未能解决你的问题,请参考以下文章

(MySQL) 使用 DATEDIFF 函数时遇到问题

一个特定日期和一列之间的 datediff MySQL

Javascript和datediff mysql中日期之间的日期差异不相等

datediff

Pyspark:两个日期之间的差异(Cast TimestampType,Datediff)

定义和用法 DATEDIFF() 函数返回两个日期之间的天数