with t as( select t2.tag,CAST(t1.start_time as date) fdate,COUNT(IIF(t1.if_like=1,1,null)) flike, COUNT(IIF(t1.if_retweet=1,1,null)) fzf from tb_user_video_log t1 join tb_video_info t2 on t1.video_id=t2.video_id where DATEDIFF(DAY,start_time,'2021-10-03')<9 group by t2.tag,CAST(t1.start_time as date) ) select t.*, sum(t.flike) over(partition by tag order by fdate desc rows between current row and 6 preceding) from t “BETWEEN CURRENT ROW AND ... PRECEDING”不是有效的窗口框架,不能与 OVER 子句一起使用。
时间: 2024-04-16 08:26:37 浏览: 109
FDATENUM_etc:一个包为 datenum、datevec 和 str2num 提供了非常快的版本。-matlab开发
这是因为在使用窗口函数时,`BETWEEN CURRENT ROW AND ... PRECEDING` 不是有效的窗口框架语法。窗口框架语法应该是 `ROWS BETWEEN [start] AND [end]`,其中 `[start]` 和 `[end]` 可以是以下几种选项之一:
- `UNBOUNDED PRECEDING`: 从窗口的起始位置到当前行之前的所有行。
- `CURRENT ROW`: 只包括当前行。
- `N PRECEDING`: 包括当前行以及向前的 N 行。
- `N FOLLOWING`: 包括当前行以及向后的 N 行。
- `BETWEEN [start] AND UNBOUNDED FOLLOWING`: 从 `[start]` 行到窗口的结束位置。
根据你的查询需求,如果你想要计算当前行以及前 6 行的 `flike` 列的总和,你可以使用以下语法:
```sql
SELECT t.*,
SUM(t.flike) OVER (PARTITION BY tag ORDER BY fdate DESC ROWS BETWEEN 6 PRECEDING AND CURRENT ROW)
FROM t;
```
这将计算每个标签 (`tag`) 在按照日期 (`fdate`) 降序排列的窗口中,包括当前行以及前 6 行的 `flike` 列的总和。
阅读全文