【发布时间】:2021-08-07 20:25:25
【问题描述】:
我在postgres数据库中有如下表(表名为table_test):
id dia Data_sensor_Analog
2165 2020-09-20 4585542
2165 2020-09-21 4954566
2165 2020-09-26 255
我想计算属性dia的连续天数。
为此,我尝试编写以下代码:
WITH
groups AS (
SELECT
ROW_NUMBER() OVER (ORDER BY dia) AS rn,
dateadd(dia, -ROW_NUMBER() OVER (ORDER BY dia), dia) AS grp,
dia
FROM table_test
)
SELECT
COUNT(*) AS consecutiveDates,
MIN(dia) AS minDate,
MAX(dia) AS maxDate
FROM groups
GROUP BY grp
ORDER BY 1 DESC, 2 DESC
我希望输出是:
consecutiveDates minDate maxDate
1 2020-09-20 2020-09-21
但是,当我运行代码时,出现以下错误消息:
ERROR: function dateadd(text, bigint, text) does not exist
LINE 17: dateadd(dia, -ROW_NUMBER() OVER (ORDER BY dia), dia) A
我正在使用 postgres,并在网站上找到了这个示例代码:https://blog.jooq.org/2015/11/07/how-to-find-the-longest-consecutive-series-of-events-in-sql/
我将dia 属性转换为:
ALTER TABLE table_test
ALTER COLUMN dia
TYPE TIMESTAMP WITHOUT TIME ZONE
USING dia::timestamp without time zone;
【问题讨论】:
-
Postgresql 函数被输入。如果调用中的某些参数类型错误,您将收到此错误。查找函数定义并进行比较,然后转换参数以满足函数签名。主要是它可能需要日期时间而不是文本作为输入。
标签: sql postgresql window-functions