代码之家  ›  专栏  ›  技术社区  ›  Sarah Vessels

选择时间最早的用户并加入其他数据

  •  1
  • Sarah Vessels  · 技术社区  · 15 年前

    我有一个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条件匹配的值。我想我不能用 HAVING 因为我没有在我的select中执行任何聚合函数。最早的 时间 需要应用“值”条件 只有 选择 用户 字段,即我想要 id value 为选择 全部的 价值观 时间 字段。

    我想我可以保留上面的select语句,然后与另一个select语句联接,该语句将 用户 我想要。

    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
         )
    

    但是,它只获取一个值 用户 总的来说,应该有一个单独的 用户 各值 身份证件 在我的第一个查询中选择。我该如何限制我的 SELECT user 按其他查询的查询 身份证件 字段?这是获得我想要的东西的正确方法吗?

    1 回复  |  直到 15 年前
        1
  •  1
  •   Quassnoi    15 年前
    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'