假设我有以下结果集:
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 = 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))