在 select 输出中获取过去 7 天的数据

Get last 7 days worth of data in select output

我正在尝试制作一个脚本,该脚本将通过电子邮件将 Firebird SQL 查询作为报告发送出去。

我创建了查询:

SELECT 
  MASTER.MST_FIRST_NAME || ' ' || MASTER.MST_LAST_NAME AS PERSON,
  TAG.TAG_CODE AS CODE,
  TRANSACK.TR_DATE AS DATE_ACCESED,
  TRANSACK.TR_TIME AS TIME_ACCESSED,
  READER.DR_NAME AS LOCATION,
  MASTER.MST_EMAIL,
  EVENT_TYPE.ET_DESC
FROM
  TAG
  INNER JOIN MASTER ON (TAG.MST_SQ = MASTER.MST_SQ)
  INNER JOIN TRANSACK ON (TAG.TAG_CODE = TRANSACK.TR_TAG_CODE)
  INNER JOIN TAG_LEVEL ON (TAG.TL_VALUE = TAG_LEVEL.TL_VALUE)
  INNER JOIN MASTER_TYPE ON (MASTER.MT_NO = MASTER_TYPE.MT_NO),
  READER,
  EVENT_TYPE
WHERE
  TRANSACK.TR_DATE > dateadd(year, -3, current_timestamp)

输出应该是这样的:

PERSON CODE DATE_ACCESED TIME_ACCESSED LOCATION MST_EMAIL ET_DESC
First Last 412412421421 20190121 143453 storage first.last@example.com Alarm 4
First Last 412412421421 20190121 180459 storage first.last@example.com Alarm 4
First Last 412412421421 20190121 180637 storage first.last@example.com Alarm 4
First Last 412412421421 20190121 113516 storage first.last@example.com

但是无论我阅读了多少文档,我都无法找到如何将其自动化以使其 select 最近 7 天的条目适合该查询。

我试过添加 WHERE

DATEADD(year, 1, current_timestamp) >= DATEADD(year, -7, current_timestamp)

SELECT * FROM rdb$database WHERE dateadd(7 day to current_date);
Statement failed, SQLSTATE = 42000
Dynamic SQL Error
-SQL error code = -104
-Unexpected end of command - line 1, column 63
current_timestamp >= DATEADD(year, -7, current_timestamp)

可能有 20 个带有 EXACT 和 NOW 的变体。

有关更多上下文,这是由 ACS 系统生成的,它使用 Firebird,它似乎能够生成漂亮的输出,如人类可读的日期和时间,但我无法真正找到它在提取时如何执行查询和 运行 jar 文件,并 运行 使用查看器查看它们。

谁能帮帮我?

这是我最接近得到的东西:

SELECT TR_DATE FROM TRANSACK WHERE TR_DATE= substring(100+extract(day from current_date) from 2 for 2) || '.' || substring(100+extract(month from current_date) from 2 for 2) || '.' || extract(year from current_date);
Statement failed, SQLSTATE = 22018
conversion error from string "01.03.2021"

我从这个问题中得到了这个查询示例:Firebird Select Field From Table where Field = current_date

在@Mark Rotteveel 的回复后我终于看到了一个很好的错误:

SQL> select * from TRANSACK WHERE TR_DATE > dateadd(day, -7, current_timestamp);

        S_ID       TR_SEQ      TR_DATE      TR_TIME TR_TERM_SLA                 TR_DPT_NO TR_EVENT TR_DIRECTION TR_TAG_CODE                                      TR_TT_TYPENO     TR_MSTSQ TR_REASON_CODE TR_PROCESSED
============ ============ ============ ============ ======================== ============ ======== ============ ================================================ ============ ============ ============== ============
Statement failed, SQLSTATE = 22018
conversion error from string "20200324"

谁能举例说明我以后应该做什么?这应该用演员表改变吗? 如果可能的话,请在您的答案中粘贴一个示例,我真的不知道 sql 语法,我可能不会在我放置的确切查询中看到一个简单的错误:/

如果你想要最后 7 天,你必须减去 7 天,而不是年。

https://firebirdsql.org/file/documentation/html/en/refdocs/fblangref25/firebird-25-language-reference.html#fblangref25-functions-scalarfuncs-dateadd

使用 ... WHERE TRANSACK.TR_DATE > dateadd(day, -7, current_timestamp) 显示过去 7 天的结果,而不是显示过去 3 年结果的 ... WHERE TRANSACK.TR_DATE > dateadd(year, -3, current_timestamp)