2014-04-03 58 views
0

我有一張表,可以有多個記錄ip_address。不過,我想回到這裏canceled=0如果ip_address多個記錄存在的行,否則得到的第一行,其中canceled=1SQL查詢以根據行值獲取具有首選項的行

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」

+0

你有多遠?開始查詢開始,我們可以指出一些具體問題。 – Adam

+0

SELECT b.id,a.ip_address,b.username,b.canceled FROM(通過取消從mytable order中選擇distinct(ip_address))a,mytable b WHERE b.ip_address = a.ip_address; 但是,這是返回多個定義「ip_address」 – sadris

+0

_取消的第一行= 1_通過什麼措施?用'id'命令? –

回答

0

正確的查詢多個定義似乎是:

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

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 
+0

SQLite沒有窗口函數。 –

+0

哎呀,我寫的htat爲sql server.sorry我沒有看到標籤 –

相關問題