如何更正此查询中具有相同日期的某些参数 Order by date 的分区?

How to correct the Partition over certain parameter Order by date that has identical dates in this query?

我在下面有这个查询,它将一个名为 'session_change' 的新列指定为 1。 因此,只要(当前行中的日期)和(上一行中的日期)之间的差异大于 30 分钟(30*60 秒),就会发生这种情况。

这些是日期/纪元/session_change:

但是我有一个问题。

当后续行中的纪元秒中有相同的日期时。如果差异大于 30 分钟,它将那些相同纪元秒中的最后一个标记为 session_change。 (相同的纪元秒是具有这些值 1475053048.00000 的记录)

当它从 1474460665.00000 变为 1475053048.00000 时,它标志着您在快照中看到的最后一条记录。

如何在相同纪元秒中的第一条记录上标记session_change。

非常感谢您的帮助。

SELECT *
    , CASE 
          WHEN EXTRACT(EPOCH FROM date) - LAG(EXTRACT(EPOCH FROM date)) OVER (PARTITION BY userid ORDER BY date) >= 30 * 60 
          THEN 1
     ELSE 0
   END as session_change
FROM
  <table_name>
order by date;

这真的很糟糕 "solution",但是您的查询和输出中的 select * 表明确实没有其他字段我们可以利用来确定在有的情况下会出现哪些行一个领带。所以,我们真正能做的就是伪造输出的渲染:

SELECT *,
  CASE 
    WHEN EXTRACT(EPOCH FROM date) -
      LAG(EXTRACT(EPOCH FROM date)) OVER (PARTITION BY userid ORDER BY date) >= 30 * 60 
    THEN 1
  ELSE 0 END as session_change
FROM
  <table_name>
order by date, session_change desc