2016-01-14 49 views
1

我的表中有数据如下:为了从多个记录列表中的特定记录在SQL

Column1 Column2 Column3 
ACC1  940  1 
ACC1  950  1  
ACC1  950  50 
ACC2  940  1 
ACC2  950  50 
ACC3  940  1 
ACC4  950  1 
ACC5  950  50 

我的期望是获取唯一的记录w.r.t COLUMN1。
条件1:如果只有一个帐户记录,那么检索它。
条件2:如果多个记录对于一个给定的帐户,其中
只有一条记录为第3列值为50,检索这50值
记录

+1

如果没有这些条件得到满足,然后记录? –

+0

请告诉我们你已经尝试过什么,也需要输出。 – saikumarm

回答

1

如果你想每column1值来获得一个记录,那么这是一个优先级查询。一种方法是使用窗口函数:

select t.* 
from (select t.*, 
      row_number() over (partition by column1 
           order by column3 desc 
           ) as seqnum 
     from t 
    ) t 
where seqnum = 1; 

编辑:

如果这是一个过滤查询,您希望无论是单条记录或记录与大于50的值,则仍然可以使用窗口函数:

select t.* 
from (select t.*, count(*) over (partition by column1) as cnt 
     from t 
    ) t 
where cnt = 1 or column3 >= 50; 
+0

谢谢。这解决了我的查询。 –

0
SELECT * 
FROM table t1 
     INNER JOIN (SELECT column1, 
          Count(DISTINCT column1) AS count1 
        FROM table 
        GROUP BY column1) X 
       ON t1.column1 = X.column1 
WHERE x.count1 = 1 
+0

你在哪里处理条件2? – knkarthick24

+0

50是最大值,因此seq num 1将检索第1条记录50.我在同一个查询中有其他任务,如果多个记录的值为50,那么我们有更多的条件。将在此工作。谢谢。 –

相关问题