作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个名为activity的表,其中有一个memberId和一个时间戳。我想找出在给定的月份中有多少成员执行了一项 Activity (即-在 Activity 表中有记录),但在过去12个月中,谁做了而没有。我认为超前/滞后在这里会有所帮助,但是我很难缠住它。
(我在这里同时标记了Apache Hadoop和MS SQL Server,因为我可以在任何一个中都这样做,而且我认为我可以很容易地将一个解决方案转换为另一个解决方案)。
任何帮助表示赞赏!
谢谢!
最佳答案
使用LAG函数时,我们需要先为每个成员和月份创建一条记录,然后使用LAG函数获取重要的 Activity 月份,最后使用where子句仅获取我们想要的内容:
DECLARE
@year int = 2018,
@month int = 7;
WITH
monthwise (MemberID, FirstOfMonth) AS (
SELECT DISTINCT MemberID, DATEADD(month, DATEDIFF(month, 0, ActivityDate), 0)
FROM Activities
),
prevActivity (MemberID, FirstOfMonth, prevFirstOfMonth) AS (
SELECT MemberID, FirstOfMonth
, LAG(FirstOfMonth) OVER (PARTITION BY MemberID ORDER BY FirstOfMonth)
FROM monthwise
)
SELECT MemberID
FROM prevActivity
WHERE MONTH(FirstOfMonth) = @month
AND YEAR(FirstOfMonth) = @year
AND (prevFirstOfMonth IS NULL OR DATEDIFF(month, prevFirstOfMonth, FirstOfMonth) > 12)
DECLARE
@year int = 2018,
@month int = 7;
WITH
this (MemberID) AS (
SELECT DISTINCT MemberID
FROM Activities
WHERE YEAR(ActivityDate) = @year
AND MONTH(ActivityDate) = @month
),
prev (MemberID) AS (
SELECT DISTINCT MemberID
FROM Activities
WHERE ActivityDate < DATEADD(month, @month-1 +12*(@year-1900), 0)
AND ActivityDate >= DATEADD(month, @month-1 +12*(@year-1901), 0)
)
SELECT m.MemberID
FROM Members m
INNER JOIN this ON m.MemberID = this.MemberID
LEFT JOIN prev ON m.MemberID = prev.MemberID
WHERE prev.MemberID IS NULL
关于sql - 聚集超前/滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51558755/
我有跟踪数据,我使用 LEAD 和 LAG 修改开始和结束日期,以确保上一个结束时间等于下一个开始时间。这些查询在 groupId 上进行分区,按开始时间排序。 我的问题是当其中一条记录的开始和结束时
我需要使用多个领先和滞后从数据集中计算附加功能。大量超前和滞后会导致内存不足错误。 数据框: |----------+----------------+---------+---------+----
场景: ticket 有 StartDate 和 EndDate ,如果 StartDate 和 EndDate 存在,则创建一个新的数据框作为在下面显示所需的输出。 Pyspark 数据集如下所示
我是一名优秀的程序员,十分优秀!