postgre仅将条件应用于 sql 中的某些行



假设我有以下结果集:

col1   col2   timestamp
val1    1   2016-03-01 12:00:00
val2    1   2016-05-01 12:00:00
val2    1   2016-06-01 12:00:00
val2    2   2016-05-01 12:00:00
val2    2   2016-04-01 12:00:00

如果我想应用条件,我想获取 col2=1 和时间戳应该是最大值的行。所以对于 col2 = 1,我只会得到以下行 val2 1 2016-06-01 12:00:00

我不在乎 col2=2

,对于 col2=2,我应该得到所有的行。我只想对 col2 = 1 应用上述条件。有没有办法在 sql 中做到这一点。

在 JOIN 语句中使用 GROUP BY :

SELECT * 
FROM table1
JOIN
(
   SELECT col2, MAX(timestamp) timestamp
   FROM table1
   WHERE Col2 = 1
   GROUP BY col2  
) A ON A.timestamp = table1.timestamp AND A.col2 = table1.col2

这是一个选项。您可以仅为值为 1 的 col2 窗口函数。

SELECT COL1
    , COL2
    , TIMESTAMP
FROM MY_TABLE
WHERE COL2 != 1
UNION ALL
SELECT COL1
    , COL2
    , TIMESTAMP
FROM (
    SELECT COL1
        , COL2
        , TIMESTAMP
        , ROW_NUMBER() OVER (ORDER BY TIMESTAMP DESC) RNK
    FROM MY_TABLE
    WHERE COL2 = 1
) TMP
WHERE RNK = 1

你能试试下面的查询吗?此查询特定于您的要求:

select *
from table_name  t1
where ((t1.col2 = 1 
         AND t1.timestamp = (select max(timestamp)
                               from table_name t2
                               where t2.col2 = 1))
    OR (t1.col2 <> 1))

相关内容

  • 没有找到相关文章

最新更新