Sql 如何确保只从特定表中选择第一条记录,该表在DB2中可以有多条相同ID的记录

Sql 如何确保只从特定表中选择第一条记录,该表在DB2中可以有多条相同ID的记录,sql,db2,cobol,Sql,Db2,Cobol,我正在尝试从一个事件列表中选择一个特定的事件,该列表可以有多个具有相同ID的记录 SQL查询如下所示: EXEC SQL SELECT ID, NAME, DATE, TIME FROM EVENT WHERE ID = 100 AND NAME = 'John' END-EXEC. 查询结果可以是多条记录 结果集: ID NAME DATE TIME 100 JOHN

我正在尝试从一个事件列表中选择一个特定的事件,该列表可以有多个具有相同ID的记录

SQL查询如下所示:

EXEC SQL
  SELECT ID, 
         NAME, 
         DATE, 
         TIME
    FROM EVENT 
   WHERE ID   = 100  
     AND NAME = 'John'
END-EXEC.
查询结果可以是多条记录

结果集:

ID    NAME    DATE       TIME
100   JOHN    2021-06-06 12.11.23
100   JOHN    2021-06-09 12.11.23
100   JOHN    2021-06-07 12.11.23
这导致-811,我将继续我的程序逻辑。 在这里,我想选择最新的事件,即100 JOHN 2021-06-09 12.11.23

因此,我采用了按条款排序的方法

EXEC SQL
  SELECT ID, 
         NAME, 
         DATE, 
         TIME
    FROM EVENT 
   WHERE ID   = 100  
     AND NAME = 'John'
   ORDER BY DATE DESC,
            TIME DESC 
END-EXEC.
它获取结果集为:

ID    NAME    DATE       TIME
100   JOHN    2021-06-09 12.11.23
100   JOHN    2021-06-07 12.11.23
100   JOHN    2021-06-06 12.11.23
因此,将使用100 JOHN 2021-06-09 12.11.23选择的第一个记录, 但当我运行程序时,第二个事件,即100约翰2021-06-07 12.11.23 被选中

我的要求是已经选择了最新的事件,我正在订购它的描述,但仍然
没有成功。请注意。

首先,您的查询不是有效的SQL语句——尽管您的接口可能会修复这一问题。您希望在
WHERE
子句中使用
,而不是

其次,您可以使用
fetchfirst
仅获取一行。因此:

SELECT ID, NAME, DATE,  TIME
FROM EVENT 
WHERE ID = 100 AND NAME = 'John'
ORDER BY DATE DESC, TIME DESC 
FETCH FIRST 1 ROW ONLY;

首先,您的查询不是有效的SQL语句——尽管您的接口可能修复了这一点。您希望在
WHERE
子句中使用
,而不是

其次,您可以使用
fetchfirst
仅获取一行。因此:

SELECT ID, NAME, DATE,  TIME
FROM EVENT 
WHERE ID = 100 AND NAME = 'John'
ORDER BY DATE DESC, TIME DESC 
FETCH FIRST 1 ROW ONLY;

好的,谢谢戈登,我现在用AND子句编辑了我以前的帖子。当然,我将尝试实现此解决方案,在继续之前,我只想确认是否需要任何光标来启用仅获取第一行?使用
仅获取第一行时,您将不需要光标,但可以直接执行
选择。。。INTO…
谢谢,我实现了这些功能,并且使用FETCH FIRST 1 ROW ONLY的SELECT INTO(选择INTO)工作。好的,谢谢Gordon,我现在用and子句编辑了我以前的文章。当然,我将尝试实现此解决方案,在继续之前,我只想确认是否需要任何光标来启用仅获取第一行?使用
仅获取第一行时,您将不需要光标,但可以直接执行
选择。。。INTO…
谢谢,我实现了这些功能,并且只使用FETCH FIRST 1行进行了选择INTO。