以下是我对Postgres数据库运行的查询。
select distinct(col1),col2,col3,col4
from tableNot
where col5 = 100 and col6 = '78'
order by col4 DESC limit 100;
以下是我回到控制台的输出 -
col1 col2 col3 col4
entry.one 1.2.3 18 subject
entry.one 1.2.8 18 newSubject
entry.two 3.4.9 20 lifePerfect
entry.two 3.4.5 17 helloPartner
entry.one
和entry.two
将会出现两次,那么我会比较col2
的{{1}}值,以较高者为准,我将保留该值行。因此,对于entry.one
,我会将entry.one
与1.2.3
进行比较,1.2.8
的{{1}}更高,因此我只会将此行保留为1.2.8
。 entry.one
类似,我会将entry.one
与entry.two
进行比较,3.4.9
的{{1}}更高,因此我会将此行仅保留为{{1} }}。以下是我希望在控制台上看到的输出 -
3.4.5
这可以在SQL中做吗?
P.S任何小提琴的例子都很棒。
答案 0 :(得分:2)
您可能正在寻找distinct on
,这是distinct
运营商的Postgres特定扩展。
select distinct on (col1) col1, col2, col3, col4
from tableNot
where col5 = 100
and col6 = '78'
order by col1, col4 DESC
limit 100;
http://sqlfiddle.com/#!15/04698/1
请注意,distinct
不是一项功能。 select distinct (col1), col2, col3
与select distinct col1, col2, col3
完全相同。
(标准SQL)distinct
运算符始终在选择列表的所有列上运行,而不仅仅是一个。
select distinct (col1), col2
和select distinct col1, col2
之间的差异与select (col1), col2
和select col1, col2
之间的差异相同。
答案 1 :(得分:1)
尝试此查询:
SELECT * FROM
(select distinct(col1),col2,col3,col4 from tableNot
where col5 = 100 and col6 = '78' order by col4 DESC limit 100)t1
WHERE t1.col2 = (SELECT MAX(t2.col2) FROM (select distinct(col1),col2,col3,col4
from tableNot
where col5 = 100 and col6 = '78' order by col4 DESC limit 100)t2
WHERE t1.col1 = t2.col1 group by t2.col1)
答案 2 :(得分:0)
您可以尝试其他简单查询:
SELECT DISTINCT t1.col1, t1.col2, t1.col3, t1.col4
FROM tableNot t1
INNER JOIN (SELECT MAX(col2) col2
FROM tableNot GROUP BY col1) t2 ON t1.col2=t2.col2
WHERE col5 = 100 AND col6 = '78' ORDER BY col4 DESC LIMIT 100;