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

Firebird 3.0.8中查询距第三次事件的天数(LibreOffice Base)

问题描述

在LibreOffice Base中使用Firebird 3.0.8数据库,现有一张记录事件发生次数的Events表,示例数据如下:

DateEventCount
22-04-0115
22-09-3010
22-10-011
22-10-041

需要创建查询计算从今日到第三次事件发生日的天数(示例中第三次事件日期为22-09-30)。现有查询代码如下,但其中的固定日期DATE '30-09-2022'需要替换为动态获取对应第三次事件的Date字段值的语句:

SELECT "Date"
WHERE DATEDIFF(DAY, CURRENT_DATE, DATE '30-09-2022') AS "Third Last Event"
FROM "Events"
解决方案

要动态获取第三次事件的日期,需先对Events表按日期倒序排序(最新事件在前),再取排序后的第3条记录的Date值,以下是两种可行实现方式:

方法1:窗口函数子查询

SELECT 
  DATEDIFF(DAY, CURRENT_DATE, third_event."Date") AS "Days to Third Last Event"
FROM (
  SELECT 
    "Date",
    ROW_NUMBER() OVER(ORDER BY "Date" DESC) AS event_rank
  FROM "Events"
) AS third_event
WHERE third_event.event_rank = 3

方法2:OFFSET + FETCH直接获取目标日期

SELECT 
  DATEDIFF(DAY, CURRENT_DATE, (
    SELECT "Date" 
    FROM "Events" 
    ORDER BY "Date" DESC 
    OFFSET 2 ROWS FETCH NEXT 1 ROW ONLY
  )) AS "Days to Third Last Event"

补充说明

  • 两种逻辑均以“最新事件为第1次”的规则排序,跳过前2条后取第1条即为目标的第三次事件日期。
  • Firebird的DATEDIFF参数顺序为DATEDIFF(单位, 起始日期, 结束日期),若需要得到今日与过去事件的正天数差,可调整参数顺序为DATEDIFF(DAY, "Date", CURRENT_DATE)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 02:10:34