You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL查询:如何获取每月最后一天的所有记录

获取PostgreSQL中每月最后一天的所有记录

针对你的需求,这里提供两种高效的PostgreSQL查询方案,直接筛选出指定时间范围内每月最后一天的所有记录:

方案一:直接通过日期函数判断

利用date_trunc计算当月第一天,再推导当月最后一天,直接匹配原日期:

SELECT 名称, 数量, 日期
FROM snacks
WHERE 日期 = (date_trunc('month', 日期) + INTERVAL '1 month - 1 day')::DATE
  AND 日期 BETWEEN '2016-08-02' AND CURRENT_DATE;

逻辑说明

  • date_trunc('month', 日期):将任意日期截断至当月第一天(如2018-01-31会转为2018-01-01)
  • + INTERVAL '1 month - 1 day':在当月第一天基础上加1个月再减1天,得到当月最后一天
  • 最后将结果转为DATE类型,与原日期字段匹配,即可筛选出当月最后一天的所有记录

方案二:子查询预取每月最后一天再关联

先通过分组查询找出每个月实际存在的最后一天,再与原表关联获取对应记录:

SELECT s.名称, s.数量, s.日期
FROM snacks s
INNER JOIN (
    SELECT MAX(日期) AS month_end_date
    FROM snacks
    WHERE 日期 BETWEEN '2016-08-02' AND CURRENT_DATE
    GROUP BY date_trunc('month', 日期)
) m ON s.日期 = m.month_end_date;

逻辑说明

  • 子查询通过GROUP BY date_trunc('month', 日期)按月份分组,用MAX(日期)取出每个月的最后一天
  • 原表与子查询结果通过日期字段关联,即可得到所有对应日期的记录

示例结果

执行上述任意语句后,将得到如下结果:

名称(str)数量(int)日期(date)
Cookie152018-01-31
Brownie142018-01-31
Cookie52018-02-28
Brownie62018-02-28

关于你尝试的date_trunc+distinct方案

单独使用date_trunc只能得到月份维度的截断值,distinct仅能去重月份,无法直接关联到当月最后一天的具体记录,因此无法满足需求。

内容的提问来源于stack exchange,提问作者Tarcisio Lopes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 03:57:00