如何确保仅从特定表中选择第一条记录,该表可以在 DB2 中包含多个相同 ID 的记录

Posted

技术标签:

【中文标题】如何确保仅从特定表中选择第一条记录,该表可以在 DB2 中包含多个相同 ID 的记录【英文标题】:How to Make sure only the First Record is Selected from a particular table have which can Mutiple Records of Same ID in DB2 【发布时间】:2021-06-09 11:58:58 【问题描述】:

我正在尝试从一个事件中选择一个特定事件,该事件可以有多个具有相同 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

因此我应用了 ORDER BY 子句。

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 JOHN 2021-06-07 12.11.23 被选中。

我的要求是选择我通过 DESC 订购的最新活动,但仍然 没有成功。请指教。

【问题讨论】:

【参考方案1】:

首先,您的查询不是有效的 SQL 语句——尽管您的界面可能会解决这个问题。您希望 ANDWHERE 子句中,而不是 ,

其次,您可以使用FETCH FIRST 仅获取一行。所以:

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

【讨论】:

好的,谢谢 Gordon,我现在用 AND 子句编辑了我以前的帖子。当然我会尝试实施这个解决方案,在我继续之前,只是想确认我是否需要任何光标来仅启用 FETCH FIRST 1 ROW? 当使用FETCH FIRST 1 ROW ONLY时,你不需要光标,但可以直接使用SELECT ... INTO ... 谢谢,我实现了这些,SELECT INTO with FETCH FIRST 1 ROW ONLY 有效。

以上是关于如何确保仅从特定表中选择第一条记录,该表可以在 DB2 中包含多个相同 ID 的记录的主要内容,如果未能解决你的问题,请参考以下文章

MySQL:在表中选择第一条记录,最后一条记录和 200 条均匀间隔的记录

ComboBox 只选择第一条记录

仅从表中选择最新记录并使其快速,如何?

如何在插入第一条记录并将其添加到对象数组后“保存”表?

如何使用 LINQ 仅从实体加载最后一条记录?

如何根据总和值选择特定记录