簡體   English   中英

將條件僅應用於sql中的某些行

[英]Applying condition to only certain rows in 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和timestamp應該是最大值的行。 所以對於col2 = 1我只會得到val2 1 2016-06-01 12:00:00行以下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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM