[英]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.