我在 SQL 中有一个列出所有事件的表。我想要在 30 天前记录事件但不是在 [重复] 之后记录事件的用户
Posted
技术标签:
【中文标题】我在 SQL 中有一个列出所有事件的表。我想要在 30 天前记录事件但不是在 [重复] 之后记录事件的用户【英文标题】:I have a table in SQL that lists all events. I want the users who have events recorded 30 days back but not after [duplicate] 【发布时间】:2020-12-13 18:15:27 【问题描述】:(基本上是试图获取过去 30 天内未进行任何活动的非活跃用户)
表格的结构是这样的 -
用户 ID // 设备 ID // 事件名称 // event_date
如何获取在特定时间段内有事件记录的用户列表?
【问题讨论】:
你在哪里有困难?你看过DATE_SUB()
函数吗?
感谢您的回复。我是 SQL 新手,只知道一些基本功能。不确定如何使用 DATE_SUB()
W3Schools 网站提供了一些简单的示例。如果您有任何问题,请先阅读并返回。
谢谢我经历了这个,不确定这是否解决了我的问题。问题是,我可以列出在特定时间范围内活跃的用户,但我希望那些在某个时间范围内活跃且在另一个时间范围内不活跃的用户
那么要找出过去 30 天内发生过事件的用户 (NOT IN
) 之外的所有用户的列表?
【参考方案1】:
在where子句中添加条件
SELECT user_id, device_id, event_name, event_date FROM user
WHERE event_date >= DATEADD(day,-30,GETDATE())
and event_date <= getdate()
或者使用 DateDiff
SELECT user_id, device_id, event_name, event_date FROM user
WHERE DATEDIFF(day,event_date,GETDATE()) between 0 and 30
【讨论】:
谢谢。但问题是这会让我在数据范围之间发生事件。但是我如何排除最近活跃的用户呢?例如 - 7 月 1 日至 8 月 1 日之间会有一些活动。但我需要在 8 月 1 日之后没有任何活动的用户 此答案适用于 ms sql server,不适用于 mysql。【参考方案2】:<?php
$fromDate = "2020-08-01 00:00:00"; //replace it with starting date in same format
$toDate = "2020-08-10 23:59:59"; //replace it with ending date in same format
//replace with your table name and make
//make sure datatype of event_date column must be "DATETIME" in sql database
$query = "SELECT * FROM EVENT_TABLE_NAME where event_date >= $fromDate and event_date <= $toDate";
您可以执行此查询,您将获得在给定日期范围内发生的记录列表。
【讨论】:
谢谢。但是我如何排除最近活跃的用户呢?例如 - 7 月 1 日至 8 月 1 日之间会有一些活动。但我需要在 8 月 1 日之后没有任何活动的用户 除非之前在 cmets 中讨论过,否则以未标记的语言提供解决方案似乎是不合适的。在这种情况下,完全没有必要引入应用程序代码。 请把你的问题写清楚。你没有提到那个场景。以上是关于我在 SQL 中有一个列出所有事件的表。我想要在 30 天前记录事件但不是在 [重复] 之后记录事件的用户的主要内容,如果未能解决你的问题,请参考以下文章