SQL查询以获取具有基于行值的首选项的行

时间:2014-04-03 15:21:10

标签: sql sqlite

我有一个表可以有ip_address的多个记录。但是,我想返回canceled=0 的行,如果存在ip_address的多个记录,否则请获取canceled=1

的第一行
id  ip_address  username  canceled
0   10.10.10.1  john      0
1   10.10.10.1  johnny    1
2   10.10.10.1  quincy    1
3   10.10.10.2  bob       1
4   10.10.10.3  kristin   0

示例返回SELECT ip_address,username ....的结果集:

10.10.10.1  john
10.10.10.2  bob
10.10.10.3  kristin

如果有任何相关性,请使用SQLAlchemy / Sqlite。

SELECT 
  b.id,
  a.ip_address,
  b.username,
  b.canceled
FROM (
  select distinct(ip_address) from mytable order by canceled) a,
  mytable b
WHERE
  b.ip_address=a.ip_address; 

但是这会为" ip_address"

返回多个定义

2 个答案:

答案 0 :(得分:1)

正确的查询似乎是:

SELECT b.id,a.ip_address,b.username,b.canceled FROM (select distinct(ip_address) from mytable order by canceled) a, mytable b WHERE b.ip_address=a.ip_address GROUP BY b.ip_address

答案 1 :(得分:0)

假设取消是一个int,这应该可行。

select *from #temp order by canceled
with cte as 
(
select ip_address,username,canceled,ROW_NUMBER() over(partition by  ip_address order by canceled) as rn from #temp
)
select *from cte where rn=1