Sql 如何在此查询中更正具有相同日期的特定参数Order by date上的分区?

Sql 如何在此查询中更正具有相同日期的特定参数Order by date上的分区?,sql,postgresql,window-functions,Sql,Postgresql,Window Functions,我在下面有一个查询,它将一个名为“session_change”的新列指定为1。 因此,只要(当前行中的日期)和(前一行中的日期)之间的差异大于30分钟(30*60秒),就会发生这种情况 这些是日期/纪元/会话更改: 但我有个问题 当后续行中存在以历元秒为单位的相同日期时。如果差值大于30分钟,则当会话_更改时,它将标记这些相同历元秒中的最后一个。(相同的历元秒是这些值为1475053048.00000的记录) 当它从1474460665.00000更改为1475053048.00000时,将

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

这些是日期/纪元/会话更改:

但我有个问题

当后续行中存在以历元秒为单位的相同日期时。如果差值大于30分钟,则当会话_更改时,它将标记这些相同历元秒中的最后一个。(相同的历元秒是这些值为1475053048.00000的记录)

当它从1474460665.00000更改为1475053048.00000时,将标记快照中看到的最后一条记录

如何在这些相同的历元秒中的第一条记录上标记会话更改

非常感谢你的帮助

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;
选择*
案例
当提取(从日期开始的历元)-滞后(提取(从日期开始的历元))超过(按用户ID顺序按日期划分)>=30*60
那么1
其他0
当会话更改时结束
从…起
按日期订购;
这是一个非常糟糕的“解决方案”,但查询和输出中的
选择*
表明,在出现平局的情况下,确实没有其他字段可以用来确定哪些行出现。因此,我们真正能做的就是伪造输出的渲染:

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
选择*,
案例
提取时(从日期开始的历元)-
滞后(提取(从日期算起的历元))超过(按用户ID按日期顺序划分)>=30*60
那么1
否则0将随着会话\u的更改而结束
从…起
按日期排序,会话\更改说明
这是一个非常糟糕的“解决方案”,但查询和输出中的
选择*
表明,在出现平局的情况下,确实没有其他字段可以用来确定哪些行出现。因此,我们真正能做的就是伪造输出的渲染:

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
选择*,
案例
提取时(从日期开始的历元)-
滞后(提取(从日期算起的历元))超过(按用户ID按日期顺序划分)>=30*60
那么1
否则0将随着会话\u的更改而结束
从…起
按日期排序,会话\更改说明

它是哪个数据库管理系统?神谕博士后?红移?请仅标记您实际使用的DBMS。postgresql/RedShiftt没有第一条记录,除非您有另一列指定顺序。如果愿意,您可以标记所有记录。是的,如何自动将行号添加到这些相同的记录中,并仅标记第一个记录@gordonlinoff@onlinetravel . . . 重复:SQL表表示无序集。没有第一行,除非列显式定义了顺序。它是哪个DBMS?神谕博士后?红移?请仅标记您实际使用的DBMS。postgresql/RedShiftt没有第一条记录,除非您有另一列指定顺序。如果愿意,您可以标记所有记录。是的,如何自动将行号添加到这些相同的记录中,并仅标记第一个记录@gordonlinoff@onlinetravel . . . 重复:SQL表表示无序集。没有第一行,除非列明确定义了顺序。非常感谢!成功了。我没想过,谢谢你!成功了。我没想过