我在那里我试图选择从那里某些条件得到满足的最早的行(根据user场)一time领域的Oracle数据库,我不知道该怎么做。这里是我的查询的要点:

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与最早time值符合WHERE条件从该行获得唯一的值。我不认为我可以使用HAVING,因为我没有做任何聚合函数在我的选择。在“最早time值”条件需要施加的user字段的选择,即,我想为所有id字段的值将被选择valuetime

我想我可以保持SELECT语句我上面,然后与获取特定user我想另一个SELECT语句的JOIN。

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一个值整体,并且应该有在我的第一查询中选择的每个user单独id值。如何限制由其他查询的SELECT user场我id查询?这甚至得到我想要的东西是正确的做法?

有帮助吗?

解决方案

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'
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top