- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要根据当前记录的某些其他列和先前记录的 X 值(使用一些分区和顺序)计算某些列 X 的值。基本上我需要在表单中实现查询
SELECT <some fields>,
<some expression using LAG(X) OVER(PARTITION BY ... ORDER BY ...) AS X
FROM <table>
这是不可能的,因为在窗口函数中只能使用现有的列,所以我正在寻找克服这个问题的方法。
这是一个例子。我有一张有事件的 table 。每个事件都有 type
和 time_stamp
。
create table event (id serial, type integer, time_stamp integer);
我不想找到“重复”事件(跳过它们)。重复是指以下内容。让我们按 time_stamp
升序排列给定 type
的所有事件。然后
time_stamp
不大于前一个非重复的 time_stamp
加上一些常量 TIMEFRAME
) 是重复的time_stamp
比上一个非重复事件多于 TIMEFRAME
的事件不重复对于这个数据
insert into event (type, time_stamp)
values
(1, 1), (1, 2), (2, 2), (1,3), (1, 10), (2,10),
(1,15), (1, 21), (2,13),
(1, 40);
和TIMEFRAME=10
结果应该是
time_stamp | type | duplicate
-----------------------------
1 | 1 | false
2 | 1 | true
3 | 1 | true
10 | 1 | true
15 | 1 | false
21 | 1 | true
40 | 1 | false
2 | 2 | false
10 | 2 | true
13 | 2 | false
我可以根据当前 time_stamp
和上一个非重复事件的 time_stamp
计算 duplicate
字段的值,如下所示:
WITH evt AS (
SELECT
time_stamp,
CASE WHEN
time_stamp - LAG(current_non_dupl_time_stamp) OVER w >= TIMEFRAME
THEN
time_stamp
ELSE
LAG(current_non_dupl_time_stamp) OVER w
END AS current_non_dupl_time_stamp
FROM event
WINDOW w AS (PARTITION BY type ORDER BY time_stamp ASC)
)
SELECT time_stamp, time_stamp != current_non_dupl_time_stamp AS duplicate
但这不起作用,因为计算的字段不能在 LAG
中引用:
ERROR: column "current_non_dupl_time_stamp" does not exist.
那么问题来了:我可以重写这个查询来达到我需要的效果吗?
最佳答案
朴素的递归链编织器:
-- temp view to avoid nested CTE
CREATE TEMP VIEW drag AS
SELECT e.type,e.time_stamp
, ROW_NUMBER() OVER www as rn -- number the records
, FIRST_VALUE(e.time_stamp) OVER www as fst -- the "group leader"
, EXISTS (SELECT * FROM event x
WHERE x.type = e.type
AND x.time_stamp < e.time_stamp) AS is_dup
FROM event e
WINDOW www AS (PARTITION BY type ORDER BY time_stamp)
;
WITH RECURSIVE ttt AS (
SELECT d0.*
FROM drag d0 WHERE d0.is_dup = False -- only the "group leaders"
UNION ALL
SELECT d1.type, d1.time_stamp, d1.rn
, CASE WHEN d1.time_stamp - ttt.fst > 20 THEN d1.time_stamp
ELSE ttt.fst END AS fst -- new "group leader"
, CASE WHEN d1.time_stamp - ttt.fst > 20 THEN False
ELSE True END AS is_dup
FROM drag d1
JOIN ttt ON d1.type = ttt.type AND d1.rn = ttt.rn+1
)
SELECT * FROM ttt
ORDER BY type, time_stamp
;
结果:
CREATE TABLE
INSERT 0 10
CREATE VIEW
type | time_stamp | rn | fst | is_dup
------+------------+----+-----+--------
1 | 1 | 1 | 1 | f
1 | 2 | 2 | 1 | t
1 | 3 | 3 | 1 | t
1 | 10 | 4 | 1 | t
1 | 15 | 5 | 1 | t
1 | 21 | 6 | 1 | t
1 | 40 | 7 | 40 | f
2 | 2 | 1 | 2 | f
2 | 10 | 2 | 2 | t
2 | 13 | 3 | 2 | t
(10 rows)
关于postgresql - 窗口函数 LAG 可以引用正在计算其值的列吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34338991/
library(dplyr) library(stats) 我正在使用滞后变量运行大量回归,并且我的 R 控制台与上述包有冲突。我知道我可以通过为每次回归输入“dplyr::lag()”来规避这个问题
正如标题所说。加载 pglm 后,lag 停止正常工作。 library(pglm) c(1,2,3,4) %>% lag() 该对象被转换为时间序列,并且不再与 tibbles 兼容。 即使卸载pg
正如标题所说。加载 pglm 后,lag 停止正常工作。 library(pglm) c(1,2,3,4) %>% lag() 该对象被转换为时间序列,并且不再与 tibbles 兼容。 即使卸载pg
我目前正在为我的投资组合网站构建一个修改后的光标。不幸的是,当我尝试滚动和移动光标时,我的光标出现滞后。但是,当我从 HTML、CSS 和 JavaScript 中删除所有其他元素并且只有与我的光标相
如果浏览器应用程序执行计算量较大或阻塞的操作,则事件循环将会延长。 有没有办法获得有关事件循环长度的定性指标? 这是为了衡量客户端 Web 应用程序在客户端上呈现的“容易程度”(即是否有足够的计算资源
我有一个问题。我正在 tkinter 中制作平台游戏,但遇到问题:我现在有:玩家、积木和硬币。我正在更新玩家的 Action 及其动画和硬币的动画,由于某种原因,当我投入太多硬币时,玩家的 Actio
我有一个包含 3 个 fragment 的 ViewPager Fragment。每个都有一个图像作为背景和一个 TextView。 TextView 始终绝对位于屏幕左侧(而不是 Fragment
当我尝试在 CLOB 列上使用 LAG 函数时遇到问题。 假设我们有一张 table create table test ( id number primary key, not_cl
您好,我是 SQL 的新手,希望有人能帮助我解决这个问题。我一直在这里和那里使用滞后函数,但想知道是否有办法重写它以使其进入总和范围。因此,我想将前 12 个月的每个时间段加在一起,而不是之前的一个月
我清楚地记得 T-SQL 永远不会让您混合使用 LAG 和 WHERE。例如, SELECT FOO WHERE LAG(BAR) OVER (ORDER BY DATE) > 7 永远不会工作。无论
我的数据文件是许多结构相似的文本文件的合并: 行“新文件开始”, 行与文件名, “数据线”有两列:域和事件数 每个文件的此类“数据行”数量可能从 0 到数十万不等目标是添加新列,每一行将指示它相关的文
我正在尝试在 R 中复制以下公式: Xt = Xt-1 * b + Zt * (1-b) 我正在使用以下代码 t %>% mutate(x= ifelse(week == 1, z, NaN))
我今天来找你是因为我正在努力处理涉及 LAG 函数的查询(仅供引用,我使用的是 PostgreSQL)。我有一张表格,其中包含每月按国家/地区销售给另一个产品的产品数量。该表定义如下: create
当我尝试在 tibble 中的一列字符上使用滞后函数(来自 dplyr 库)时,我在 R 中遇到以下错误: Error in mutate_impl(.data, dots) : Expecting
我有两个向量,subject 和 target。我想根据两个现有向量之间的比较创建一个新向量,比较元素 lagged。我已经使用下面的循环解决了这个问题,但我本质上想知道是否有使用 apply 的更优
我有一个日期表,我需要在其中存储前一行的 val当前行中的列。但是,我不能使用 LAG子句,因为存在缺失的日期,并且只有在前一个直接日期存在时才应提取前一个值并将其存储在当前行中。因此我必须(我认为)
我是 SQL Server 的新手,我对 lag() 函数有一些疑问。 我必须计算两个用户事件之间的平均距离(以天为单位)。然后,我必须对所有用户进行 GROUP BY,计算每个用户行之间的所有日期差
嗨,我正在我的网络应用程序中实现实时搜索(=输入时搜索)功能。目前我正在使用 keyup 事件通过 ajax post 发送搜索请求,例如 $('#SearchField').keyup(functi
这里可能存在 BigQuery 错误?我正在运行一个查询,该查询使用 LAG() 函数来获取先前的时间采样值。例子: 架构: id: STRING time: TIMESTAMP 询问: SELECT
如何告诉 LAG 函数获取最后一个“非空”值? 例如,请参阅下面的表,其中 B 列和 C 列上有一些 NULL 值。我想用最后一个非空值填充空值。我尝试使用 LAG 函数来做到这一点,如下所示: ca
我是一名优秀的程序员,十分优秀!