sql - 使用单独的日期和时间字段查询最近的记录

标签 sql sap advantage-database-server

我正在使用 SAP Advantage 中的一个表,其中包含单独的日期和时间字段。我想查找日期和时间在过去 5 分钟内的记录。

这在 99% 的时间里都有效:

SELECT
    *
FROM
    table_name
WHERE 
    TIMESTAMPDIFF(SQL_TSI_DAY, date_field, CURRENT_TIMESTAMP()) < 1
AND
    TIMESTAMPDIFF(SQL_TSI_MINUTE, time_field, CURRENT_TIMESTAMP()) < 5

但是,这在午夜前后不起作用。例如,在中午 12:00,前一天晚上 11:57 创建的任何记录都不会与过滤器匹配。

有什么想法吗?谢谢!

数据示例图像。根据此数据,我想在 2019 年 7 月 12 日凌晨 12:01 返回最后 2 行。

enter image description here

Created: 7/11/2019 22:54:43

Item EmpNo      LastName             FirstName       date_field time_field
--------------------------------------------------------------------------
1          2 Nelson               Roberto         7/11/2019  21:00:00  
2          4 Young                Bruce           7/11/2019  22:00:00  
3          5 Lambert              Kim             7/11/2019  23:00:00  
4          8 Johnson              Leslie          7/11/2019  23:56:00  
5          9 Forest               Phil            7/12/2019  00:00:00  

最佳答案

最简单的方法是重新组合字段,然后使用 TIMESTAMPDIFF():

TRY DROP TABLE #test; CATCH ALL END TRY;

CREATE TABLE #test
(
    date_field DATE
  , time_field TIME
);

INSERT INTO #test
      SELECT '2019-07-11', '21:00:00' FROM system.iota
UNION SELECT '2019-07-11', '22:00:00' FROM system.iota
UNION SELECT '2019-07-11', '23:00:00' FROM system.iota
UNION SELECT '2019-07-11', '23:56:00' FROM system.iota
UNION SELECT '2019-07-12', '00:00:00' FROM system.iota
;

SELECT
  TIMESTAMPDIFF(SQL_TSI_MINUTE, 
      CREATETIMESTAMP(
          YEAR(date_field)
        , MONTH(date_field)
        , DAY(date_field)
        , HOUR(time_field)
        , MINUTE(time_field)
        , SECOND(time_field)
        , 0
      )
    , DATETIME'2019-07-12T00:00:00' --  CURRENT_TIMESTAMP()
  )
FROM #test;

这给出了预期的结果:

180
120
4
0

如果 ADS 支持直接组合日期和时间的运算符或函数,那就更简单了,但我在文档中找不到。

因此,如果您将其集成到您的原始 SQL 代码中,它将是:

SELECT
    *
FROM
    table_name
WHERE 
  TIMESTAMPDIFF(SQL_TSI_MINUTE, 
      CREATETIMESTAMP(
          YEAR(date_field)
        , MONTH(date_field)
        , DAY(date_field)
        , HOUR(time_field)
        , MINUTE(time_field)
        , SECOND(time_field)
        , 0
      )
    , CURRENT_TIMESTAMP()
  ) < 5

关于sql - 使用单独的日期和时间字段查询最近的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56999294/

相关文章:

.net - SAP 和 PeopleSoft 使用 Web 服务复杂对象

hadoop - 需要通过 Spark 加载 Hana 表,没有 Spark Vora 集成

ads - 如果用户不是 ADSSYS,则 SELECT * FROM system.storedprocedures 返回空游标

sql - 如何识别与 sybase 数据库中的表关联的触发器?

php - 将 MS-SQL 查询的结果更新到 MySql 数据库

php - 多个 mysql 语句未通过 php 执行(语句通过 phpmyadmin 运行)

sql - 如何以恒定速度从 PostgreSQL 中检索数据?

web-services - SOAP 请求的问题

php - sql命令从数量中减去一项

PHP PDO 连接到 Advantage 数据库 SQL Server