如何确保仅从特定的 table 中选择第一条记录,在 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
我正在尝试从一个事件中选择一个特定的事件,它可以有多个具有相同 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,我将继续我的程序逻辑。
我想在这里 select 最新事件,即 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
因此,第一个 select 编辑的记录是 100 JOHN 2021-06-09 12.11.23,
但奇怪的是,当我 运行 程序时,第二个事件即 100 JOHN 2021-06-07 12.11.23
是 selected.
我的要求是 selected 最新的活动 hecne 我正在通过 DESC 订购它,但仍然
没有成功。请指教
首先,您的查询是无效的 SQL 语句——尽管您的界面可能修复了该问题。您需要 WHERE
子句中的 AND
而不是 ,
.
其次,您可以使用 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;
我正在尝试从一个事件中选择一个特定的事件,它可以有多个具有相同 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,我将继续我的程序逻辑。 我想在这里 select 最新事件,即 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
因此,第一个 select 编辑的记录是 100 JOHN 2021-06-09 12.11.23, 但奇怪的是,当我 运行 程序时,第二个事件即 100 JOHN 2021-06-07 12.11.23 是 selected.
我的要求是 selected 最新的活动 hecne 我正在通过 DESC 订购它,但仍然 没有成功。请指教
首先,您的查询是无效的 SQL 语句——尽管您的界面可能修复了该问题。您需要 WHERE
子句中的 AND
而不是 ,
.
其次,您可以使用 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;