按最大列返回重复的行

时间:2019-03-19 13:34:34

标签: sql postgresql aggregate-functions

我正在尝试通过最大initID复制所有行(标题)。

这是我的桌子:

  ID |      title      | revision | initID
  1  |    Mytitle 1    |    0     |  10
  2  |    Mytitle 1    |    1     |  10
  3  |    Mytitle 1    |    2     |  10
  4  |    Mytitle 1    |    0     |  20
  5  |    Mytitle 1    |    1     |  20

  6  |    Mytitle 2    |    0     |  30
  7  |    Mytitle 2    |    1     |  30

  8  |    Mytitle 3    |    0     |  40
  9  |    Mytitle 3    |    1     |  40
  10 |    Mytitle 3    |    0     |  50
  11 |    Mytitle 3    |    1     |  50
  12 |    Mytitle 3    |    2     |  50

  13 |    Mytitle 4    |    0     |  60

我的目标是检查是否有多个initID具有相同的标题,并使用MAX(initid)获得重复的行。

对于这个例子,我想从我的请求中得到这个回报:

  4  |    Mytitle 1    |    0     |  20
  5  |    Mytitle 1    |    1     |  20
  10 |    Mytitle 3    |    0     |  50
  11 |    Mytitle 3    |    1     |  50
  12 |    Mytitle 3    |    2     |  50

如果标题只有一个initID,我不想让这些行退回。

2 个答案:

答案 0 :(得分:1)

您可以将EXISTS与相关子查询一起使用:

SELECT t.*
FROM table t
WHERE EXISTS (SELECT 1 FROM table t1 WHERE t.title = t1.title AND t1.initID <> t.initID) AND
      t.initID = (SELECT MAX(t1.initID) FROM table t1 WHERE t1.title  = t.title);

答案 1 :(得分:0)

使用相关子查询

 select t.* from table_name t
 where exists( select 1 from table_name t2 where t1.title=t2.title 
                   having count(*)>1)
 and t1.initID=( select max(initID) from table_name t2 where t1.title=t2.title)