在 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 天,而不是年。
使用 ... WHERE TRANSACK.TR_DATE > dateadd(day, -7, current_timestamp)
显示过去 7 天的结果,而不是显示过去 3 年结果的 ... WHERE TRANSACK.TR_DATE > dateadd(year, -3, current_timestamp)
。
我正在尝试制作一个脚本,该脚本将通过电子邮件将 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 天,而不是年。
使用 ... WHERE TRANSACK.TR_DATE > dateadd(day, -7, current_timestamp)
显示过去 7 天的结果,而不是显示过去 3 年结果的 ... WHERE TRANSACK.TR_DATE > dateadd(year, -3, current_timestamp)
。