1

我有一个 Oracle 数据库,我试图user从满足某些条件的最早行(基于time字段)中选择一个字段,但我不知道该怎么做。这是我的查询的要点:

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'

我的问题是我不知道如何选择并仅从与WHERE 条件匹配的user最早值的行中获取值。time我认为我不能使用HAVING,因为我没有在我的 SELECT 中执行任何聚合函数。“最早的值”条件time需要应用于字段的选择,即我希望并被选择用于字段的所有值。useridvaluetime

我在想我可以保留上面的 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
     )

但是,这只能获得一个整体值,并且在我的第一个查询中每个 SELECTeduser都应该有一个单独的user值。id如何SELECT user通过其他查询的id字段限制我的查询?这甚至是获得我想要的东西的正确方法吗?

4

1 回答 1

1
SELECT  id,
        CASE WHEN value = 'xyz'
             THEN 'Pending'
             ELSE 'Not Pending'
        END AS status,
        time,
        FIRST_VALUE(user) OVER (PARTITION BY id ORDER BY time) AS first_user
FROM    table1
INNER JOIN
        ...
WHERE   subject IN (...) AND
        field = 'Status'
于 2009-11-18T18:17:07.397 回答