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

如何返回每个月的最后一天并筛选视图中每月最后一条记录?

嘿,我明白你的困扰了——first()和last()这类表计算默认是基于整个视图的列来计算,不会自动按月份分组对吧?下面我给你两种场景的解决方案,不管你是做可视化视图还是用数据库取数都能搞定:

一、筛选每个月的最后一条记录

如果是用Tableau创建视图:

  • 第一步:先把日期字段转换成月份维度,创建计算字段:
    月份 = DATETRUNC('month', [你的日期字段])
    
  • 第二步:创建判断是否为当月最后一条的计算字段,这里要利用表计算的分区功能:
    是否为当月最后一条 = LAST() = 0
    
  • 第三步:把这个计算字段拖到「筛选器」里,选择True;然后右键点击这个字段,进入「编辑表计算」,设置分区依据为「月份」,寻址依据为「你的日期字段」(按降序排序),这样LAST()就会在每个月的范围内找最后一条记录了。

如果是用SQL查询数据:

用窗口函数ROW_NUMBER()按月份分区,按日期降序排序,然后取行号为1的记录就行:

WITH monthly_data AS (
    SELECT 
        *,
        -- 按月份分组,同组内按日期倒序排,第一条就是当月最后一条
        ROW_NUMBER() OVER (
            PARTITION BY DATE_TRUNC('month', date_column) 
            ORDER BY date_column DESC
        ) AS row_num
    FROM your_table_name
)
SELECT *
FROM monthly_data
WHERE row_num = 1;
二、获取每个月的最后一天

Tableau里的计算方法:

直接用内置函数或者日期运算都可以:

  • 方法一(推荐,Tableau 2020.2+支持):
    当月最后一天 = EOMONTH([你的日期字段])
    
  • 方法二(兼容旧版本):
    当月最后一天 = DATEADD('day', -1, DATETRUNC('month', [你的日期字段]) + INTERVAL '1 month')
    

SQL里的计算方法:

不同数据库有对应的快捷函数,通用写法和专属函数都给你列出来:

  • 通用写法(适配大部分数据库):
    DATE_TRUNC('month', date_column) + INTERVAL '1 month' - INTERVAL '1 day' AS month_last_day
    
  • 专属函数更简洁:
    • MySQL:LAST_DAY(date_column)
    • SQL Server:EOMONTH(date_column)
    • PostgreSQL:(DATE_TRUNC('month', date_column) + INTERVAL '1 month')::date - 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:16:53