sql - 判断月份是否包含条目

标签 sql datetime postgresql timestamp

我有一个带时间戳的日志列表,我想要一个返回 12 个 bool 值的查询,说明某个月是否包含任何日志,对于一年中的每个月(从一月开始),即:

(True, False, False, True, False ..., True)

我目前有以下查询,它将显示包含数据的所有月份:

SELECT DISTINCT(EXTRACT(MONTH FROM logdate)) AS month
FROM mytable
WHERE EXTRACT(YEAR FROM logdate) = '2009'
ORDER BY month;

其输出是包含数据的月份列表,例如:

(1, 2, 5, 6, 12)

我只是想不出下一步 - 任何指示将不胜感激。

我正在使用 PostgreSQL v8.4.2。谢谢。

最佳答案

使用 generate_series():

SELECT
    CASE
        WHEN EXTRACT(MONTH FROM logdate) IS NULL THEN false
        ELSE true
    END,
    y AS month
FROM
    mytable RIGHT JOIN generate_series(1,12) AS x(y) ON EXTRACT(month FROM logdate) = y
WHERE 
    EXTRACT(YEAR FROM logdate) = '2009';

关于sql - 判断月份是否包含条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2500572/

相关文章:

php - PostgreSql:禁用数值超出范围

python - 如何在 python 中使用复杂的 SQL 脚本

sql - 更改列默认值

MYSQL:将数据内文件...加载到表中...; DATETIME 字段变为 0000:00:00 00:00:00

php - 使用php时order by str_to_date查询返回错误

database - 根据id合并多个bytea行

SQL 连接查找两个数据源之间的不一致

python - 如何防止 pandas.to_datetime() 函数将 0001-01-01 转换为 2001-01-01

database - 从 PostgreSQL 数据库中高效地检索大型数据对象

postgresql - 在 Postgresql 中选择未锁定的行