用pgsql将一列日期数据处理成一行数据,连续日期用下划线连接,不连续用逗号连接
时间: 2023-12-17 07:05:13 浏览: 227
假设你的日期数据列名为 "date_column",那么可以使用以下 SQL 语句将其处理成符合要求的一行数据:
```sql
SELECT string_agg(date_str, case when is_gap then ',' else '_' end) as date_row
FROM (
SELECT
CASE
WHEN lead(date_column) OVER (ORDER BY date_column) = date_column + INTERVAL '1 day' THEN to_char(date_column, 'YYYY-MM-DD')
ELSE to_char(date_column, 'YYYY-MM-DD') || '_'
END as date_str,
CASE
WHEN lead(date_column) OVER (ORDER BY date_column) = date_column + INTERVAL '1 day' THEN false
ELSE true
END as is_gap
FROM your_table
) subquery;
```
解释一下上面的 SQL 语句:
1. 内层子查询使用了 `lead` 函数获取当前日期的下一个日期,如果下一个日期和当前日期相差一天,则表示这两个日期连续,否则不连续。
2. 对于连续的日期,将其转换为字符串并在后面加上下划线,表示还有后续日期。
3. 对于不连续的日期,将其转换为字符串并在后面加上逗号,表示后面还有其他不连续的日期。
4. 外层查询使用 `string_agg` 函数将所有日期字符串拼接成一行,拼接时根据是否连续选择使用下划线或逗号进行连接。
阅读全文