Sql 如何在此查询中更正具有相同日期的特定参数Order by date上的分区?
我在下面有一个查询,它将一个名为“session_change”的新列指定为1。 因此,只要(当前行中的日期)和(前一行中的日期)之间的差异大于30分钟(30*60秒),就会发生这种情况 这些是日期/纪元/会话更改: 但我有个问题 当后续行中存在以历元秒为单位的相同日期时。如果差值大于30分钟,则当会话_更改时,它将标记这些相同历元秒中的最后一个。(相同的历元秒是这些值为1475053048.00000的记录) 当它从1474460665.00000更改为1475053048.00000时,将标记快照中看到的最后一条记录 如何在这些相同的历元秒中的第一条记录上标记会话更改 非常感谢你的帮助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时,将
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表表示无序集。没有第一行,除非列明确定义了顺序。非常感谢!成功了。我没想过,谢谢你!成功了。我没想过