我正在过滤一些数据,其中table.x具有以下结构
column1 | c.2 |column3
0.0.0.0 | 20 | 2019-04-29 14:55:52
0.0.0.0 | 10 | 2019-04-29 14:45:52
0.0.0.0 | 50 | 2019-04-29 14:35:52
0.0.0.0 | 50 | 2019-04-29 14:25:52
0.0.0.0 | 90 | 2019-04-29 14:15:52
0.0.0.1 | 40 | 2019-04-29 14:05:52
0.0.0.1 | 40 | 2019-04-29 13:45:52
0.0.0.1 | 70 | 2019-04-29 13:30:52
0.0.0.4 | 20 | 2019-04-29 13:25:52
我希望结果集返回为
0.0.0.0 | 20 | 2019-04-29 14:55:52
0.0.0.1 | 40 | 2019-04-29 14:05:52
0.0.0.4 | 20 | 2019-04-29 13:25:52
你需要通过分组获得每个column3
的最大column1
,然后加入到表中:
select t.*
from tablename t inner join (
select column1, max(column3) column3
from tablename
group by column1
) g on g.column1 = t.column1 and g.column3 = t.column3
如何将DISTINCT
与一列一起使用如下:
SELECT DISTINCT ON (column1) column1, column2, column3 FROM table_name
注意c.2
不是有效的列名。
这是一个在线演示https://rextester.com/FBIS74019
您可以使用column1在max col3组上使用内连接
select * from my_table m
inner join (
select column1, max(column3) col3
from my_table
group by column1
) t on t. column1 = m.column1 and t.col3 = m.column3
请尝试以下SQL代码:
SELECT max(column1), column2, max(column3) --maximum of IP address and time
FROM yourTable
GROUP BY column1 --grouped by IP address
结果是:
max(column1) | column2 | max(column3)
------------------------------------------------
0.0.0.0 20 2019-04-29T14:55:52Z
0.0.0.1 40 2019-04-29T14:05:52Z
0.0.0.4 20 2019-04-29T13:25:52Z
尝试使用窗口功能
select
column1, column2, column3
from (
SELECT
column1, column2, column3,
row_number() over ( partition by column1 ) pbg
FROM tablename
) aaaa
where aaaa.pbg = 1