【发布时间】:2009-11-18 18:13:14
【问题描述】:
我有一个 Oracle 数据库,我试图从满足某些条件的最早行(基于 time 字段)中选择一个 user 字段,但我不知道该怎么做。这是我的查询的要点:
SELECT id,
CASE WHEN value = 'xyz'
THEN 'Pending'
ELSE 'Not Pending'
END AS status,
time
FROM table1
INNER JOIN ...
WHERE subject IN (...) AND
field = 'Status'
我的问题是我不知道如何选择 user 并仅从与 WHERE 条件匹配的最早 time 值的行中获取值。我认为我不能使用HAVING,因为我没有在我的 SELECT 中执行任何聚合函数。 'earliest time value' 条件需要 only 应用于 user 字段的选择,即我希望为 all 选择 id 和 value em> time 字段的值。
我在想我可以保留上面的 SELECT 语句,然后加入另一个 SELECT 语句,得到我想要的特定 user。
SELECT id, status, time, user
FROM (
...query above...
),
(
SELECT user
FROM table1
WHERE subject in (...) AND
field = 'Status' AND
ROWNUM = 1
ORDER BY time ASC
)
但是,总体而言,这只会为 user 获取一个值,并且在我的第一个查询中选择的每个 id 都应该有一个单独的 user 值。如何通过另一个查询的 id 字段限制我的 SELECT user 查询?这甚至是获得我想要的东西的正确方法吗?
【问题讨论】:
-
您能否发布示例数据和预期输出?
标签: sql oracle select plsql inline-view