簡體   English   中英

MySql Select 最后一行,日期相差 30 分鍾

[英]MySql Select last row with 30 minutes difference in date

這是此問題MySql Select 行的后續,日期相差 30 分鍾,盡管概念相似,但所需的解決方案可能不同。

我有一個 MySql-8.0/MariaDb-10.4 表,其中包含不同訪問者的站點訪問列表:

在此處輸入圖像描述

我想創建一個查詢,該查詢返回每次訪問的最后一次訪問 session ,其中 session 定義是CreatedAt日期是上次訪問 30 分鍾或更長時間的地方。

因此,在我的情況下,我應該返回第 7 行(Id 列)、第 12 行和第 13 行。另請注意,只要每次訪問在不到 30 分鍾的時間內成功完成上一次訪問,session 可以超過 30 分鍾。

@EugenRieck 建議的簡潔解決方案如下:

SELECT
  late.*
FROM activities AS late
LEFT JOIN activities AS early
  ON late.VisitorId=early.VisitorId
  AND late.CreatedAt>early.CreatedAt
  AND late.CreatedAt<=DATE_ADD(early.CreatedAt, INTERVAL +30 MINUTE)
WHERE early.Id IS NULL
-- Maybe: AND late.VisitorId='26924c19-3cd1-411e-a771-5ebd6806fb27'
-- Maybe: ORDER BY late.CreatedAt

它工作得很好,但它的工作原理是在每次訪問 session 中返回第一次訪問,而不是最后一次訪問 我試圖修改為我想要的工作,但沒有運氣。 請幫忙。

這是間隙和孤島問題的變體。 但是您可以使用lead()來處理它。 只需檢查下一個createdAt是否距離給定行中的值超過 30 分鍾。 這是 session 的最后一行:

select a.*
from (select a.*,
             lead(createdAt) over (partition by visitorid order by createdat) as next_ca
      from activities a
     ) a
where next_ca > createdAt + interval 30 minute;

通常,在這種情況下,您也需要最后一行。 你會得到它or next_ca is null

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM